GET und Filesystem Werte vergleichen

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich hätte gerne mal wieder ein kleines Problem. Bei einer Galerieauswahl liest ein PHP Script die Ordnernamen aus und stellt sie in ein select Feld. Bei einer Auswahl wird der Ordnername an die gleiche Seite gesendet, die dann als nächstes die verschiedenen Unterordner auflistet. Nun soll das erste Select aber weiterhin dargestellt werden, mit der getroffenen Auswahl als selected, damit der User jederzeit sehen kann, was er gewählt hatte. Das funktioniert auch, aber nur so lange bis ein Umlaut im Ordnernamen enthalten ist. Dann ist der per GET übergebene Wert nicht mehr gleich dem Wert, der aus dem Filesystem ausgelesen wird, obwohl beide identisch am Browser ausgegeben werden. Ich hab auch schon versucht, über ein preg_replace() die Umlaute zu entfernen. Beim GET Wert wird es aber nicht entfernt, sondern in den "normalen" Buchstaben umgewandelt. Aus ü wird also u.
Wie muß ich jetzt die beiden Werte aneinander anpassen, damit ich sie wieder vergleichen kann?
 
Vor der Übertragung mit base64_encode umsetzen und nach dem Empfang wieder zurücksetzen geht. Aber nur, wenn ich den dekodierten String nicht mit preg_replace() auf unerwünschte Zeichen filtere. Dann wird aus dem ü wieder ein u. Da auf der ganzen Seite aber keine DB Zugriffe stattfinden und nur in Ordnern gelesen wird, dürfte es eigentlich nicht zu böswilligen Attacken kommen, oder?
 
Ich wüsste jetzt erstmal nicht, wie sich das negativ auswirken sollte, wenn es sich um eine DB handelt, auf die zugegriffen werden soll. Grundsätzlich musst du dich um Sicherheit kümmern. Die Directory-Traversal-Methode sollte dir ein Begriff sein.
 
Genau das wollte ich ja mit dem preg_replace verhindern. Aber da zerhackt er mir eben die Umlaute.
 
Das kannst auch mit preg_replace nicht verhindern. Du musst einfach prüfen, ob die gewünschte Datei/das Verzeichnis sich innerhalb des DocumentRoot befindet oder nicht. Wüsste nicht, was da preg_replace leisten soll. Verwende realpath() auf das Ziel und schau, ob es im $_SERVER['DOCUMENT_ROOT'] ist. Wenn nicht, hat jemand ne DT versucht.
 
Damit werden bei mir generell alle Zeichen ausgefiltert, die in dem jeweiligen String nichts zu suchen haben. Hier z.B. würden . / % uvm. rausfliegen und so von einer DT nicht viel übrig bleiben.
 
Das ist aber nicht notwendig, wenn du realpath() benutzt und dann prüfst, ob $_SERVER['DOCUMENT_ROOT'] der Anfang des Ergebnisses von realpath() entspricht. Dann kann man mit Sicherheit davon ausgehen, dass man nicht in einem Verzeichnis außerdem des Servers rum hantiert.
 
Na dann ist doch zum Schluß doch noch alles gut geworden. Hab das jetzt so umgesetzt und nun klappt es auch mit den Umlauten.
Vielen Dank für deine Hilfe.
 
Zurück