Bug in class.properties.php

Gesperrt
Stefan_Br
Beiträge: 36
Registriert: Di 29. Nov 2005, 18:06
Kontaktdaten:

Bug in class.properties.php

Beitrag von Stefan_Br » So 27. Sep 2009, 20:00

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.

dominik.ziegler
Beiträge: 437
Registriert: Do 19. Jun 2008, 09:09

Re: Bug in class.properties.php

Beitrag von dominik.ziegler » Mo 28. Sep 2009, 13:21

Verschoben nach Bugs, in der Entwicklerversion behoben.
Viele Grüße
Dominik

Oldperl
Beiträge: 4251
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Bug in class.properties.php

Beitrag von Oldperl » Mo 28. Sep 2009, 16:19

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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Gesperrt