Seite 1 von 1

Bug in class.properties.php

Verfasst: So 27. Sep 2009, 20:00
von Stefan_Br
Wahrscheinlich seit dem Sicherheitsfix vom 30.6.2008 gibt es folgendes Problem, wenn man etwas mit den Properties abspeichert: Sonderzeichen bekommt man escaped zurück.

Das liegt daran, dass die zu speichernden Werte in /contenido/classes/class.properties.php vor dem Abspeichern escaped werden:

function create, Zeile 125 und function setValue, Zeile 239.

Das Problem ist, dass sie nach dem Auslesen nicht (richtig) wieder unescaped werden:

in function getValuesByType, Zeile 212 gibt es zwar ein urldecode, das passt aber nicht zum Contenido_Security::escapeDB, mit dem die values ursprünglich escaped wurden.
in function getValue fehlt das unescapen ganz.

Beides führt dazu, dass man beispielsweise keine html-Schnipsel mehr abspeichern kann.

Die Korrektur ist einfach:

Zeile 212:

Code: Alles auswählen

			$aResult[$item->get("name")] = urldecode($item->get("value"));
ersetzen durch

Code: Alles auswählen

			$aResult[$item->get("name")] = Contenido_Security::unescapeDB($item->get("value"));
und in Zeile 178

Code: Alles auswählen

			return ($item->get("value"));
ersetzen durch

Code: Alles auswählen

			return Contenido_Security::unescapeDB(($item->get("value")));
.

Ich hoffe, das wird in der nächsten Version korrigiert.

Re: Bug in class.properties.php

Verfasst: Mo 28. Sep 2009, 13:21
von dominik.ziegler
Verschoben nach Bugs, in der Entwicklerversion behoben.

Re: Bug in class.properties.php

Verfasst: Mo 28. Sep 2009, 16:19
von Oldperl
Stefan_Br hat geschrieben:Das liegt daran, dass die zu speichernden Werte in /contenido/classes/class.properties.php vor dem Abspeichern escaped werden:
Das gehört da eigentlich garnicht hin und das Problem liegt noch etwas tiefer.
Die Contenido_Security Klasse wird hier an der falschen Stelle eingesetzt. Das Properties-Objekt hat als Elternklasse die Item bzw. ItemCollection aus der Klasse class.genericdb.php.
Hier gibt es bereits eine Filterfunktion und auch hier wird Escaped.Daher ist eigentlich jeder Einsatz der Sercurity-Klasse bzw. deren escape-Funktion in abgeleiteten Klassen problematisch und wird zu Fehlern führen.
Eigentlich gehört diese Fehlerbehandlung nur einmal in der class.genericdb.php gemacht. Hierher gehört auch die Prüfung auf die Form der Variable.
Alle anderen Aufrufe der Sicherheitsklasse in Klassen die auf die Gerneric-DB aufbauen sind dann unnötig und blähen nur den Quellcode auf.

Bevor weiterhin unnötige Klassen- und Funktionsaufrufe getätigt werden muss zuerst klar sein, wo genau angesetzt werden soll, sonst sind "Querschläger" vorprogrammiert.

Gruß aus Franken

Ortwin