Seitenverwaltung und Menügenerierung mit SQL Bäumen und Sicherheit

Deutschsprachiger Support für CMS Made Simple
Post Reply
Piratos

Seitenverwaltung und Menügenerierung mit SQL Bäumen und Sicherheit

Post by Piratos »

Bei meinen eigenen CMS mach ich das schon immer - die Seitenverwaltung und darauf basierend die Menügenerierung mit SQL Bäumen (auch Nested Sets genannt).

Wer aus der traditionellen Programmierung kommt, kennt das z.B. als mehrfach verkettete Liste.

Mit einer relationalen Datenbank im Hintergrund ist die Realisierung sehr einfach - praktisch im Level unbegrenzt und bei der täglich Arbeit sehr sehr schnell und wenn die Datenbank Transaktionen und Rollback unterstützt (wie Mysql) , dann ist das auch eine sehr sichere Sache.

Die hier bei der CMS aktuell verwendete Methode (hierarchy als Stichwort) ist denkbar primitiv und versucht dieses  durch eine enfache Nachbildung auf Stringebene zu ersetzen, was ja auch klappt.

Ich möchte aber nicht sehen,was passiert, wenn tatsächlich mal 10 User gleichzeitig an den Inhalten
etwas ändern  - ich kann aus dem jetzigen Quelltext nichts entnehmen, was die sichere Funktion gewährleistet - ich würde daher eher ein heilloses Durcheinander vermuten.

Ich möchte daher anregen, dass die Developer sich darum kümmern - da ist diese CMS zu simple.

In dem Zusammenhang möchte ich auch einmal auf das primitive Niveau was Sicherheit betrifft bei der Verarbeitung (Einfügen, Updaten etc) von Rechten, Sitepreferences etc .  hinweisen.

So werden nach wie vor bei einer Rechtevergabe alle Rechte gelöscht um danach alle Rechte neu einzutragen - geht da etwas in die Hosen , klemmt die Säge aber mächtig.
Piratos

Beispiel zum Thema Datensicherheit

Post by Piratos »

Hier einmal die aktuelle Durchführung einer Änderung der Gruppenrechte:

$query = "DELETE FROM ".cms_db_prefix()."user_groups WHERE group_id = ?";
$result = $db->Execute($query, array($group_id));

// Erst alles einmal weg hauen

foreach ($_POST as $key=>$value)
{
if (strpos($key,"user-") == 0 && strpos($key,"user-") !== false)
{
$query = "INSERT INTO ".cms_db_prefix()."user_groups (group_id, user_id, create_date, modified_date) VALUES (".$db->qstr($group_id).", ".$db->qstr(substr($key,5)).", '".$db->DBTimeStamp(time())."', '".$db->DBTimeStamp(time())."')";
// Und dann neu eintragen

$result = $db->Execute($query);
}
}

Geht dabei etwas in die Hosen, dann sind die Gruppenrechte weg und damit verbunden, kann es, wenn es einen selbst betrifft zur vollständigen Aussperrung kommen.
.................
Sind da mehrere Administratoren oder allgemein User vorhanden, die gleichzeitig in einem Bereich aktiv werden, ist eine Katastrophe höchst wahrscheinlich.
.................

Die Schlüsselwörter TRANSACTION oder ROLLBACK sind nur im Adodb - Source zu finden und in keinem Source der CMS selbst.
Das gilt ebenfalls für das Schlüsselwort LOCK im Zusammenhang mit der Datenbank.
Mit anderen Worten, die Möglichkeiten der unterstützen Datenbanksysteme werden bestenfalls angekratzt im Zusammenhang mit Sicherheit der Transaktionen wird rein nichts unternommen.
Piratos

Nested Set

Post by Piratos »

Ein anschauliches Beispiel zur Realisierung von Nested Sets kann man hier sehen (ich finde die Ausführung rcht anschaulich).

http://www.klempert.de/php/nested_sets/demo/index.php

Wenn ein Developer keine Ahnung davon hat, was ich meine kann er es hier nicht nur ansehen, sondern sich auch mal etwas Code zum probieren holen.
Post Reply

Return to “German - Deutsch”