dedlfix: Filemanager-Skript

Beitrag lesen

Hi!

ich hab vor einiger Zeit angefangen ein Upload-Skript in PHP zu schreiben, was sich dann mehr und mehr zu einem Dateiverwaltungstool entwickelt hat. Sehr einfach gehalten aber doch effizient.

Wenn ich mir deinen Code anschaue, ist er vielleicht effektiv aber nicht sehr effizient.

Da es eine simple one-file-Lösung ist und bleiben soll, hatte ich bisher noch keine Funktion zum Navigieren durch Verzeichnisse implementiert. Das heißt also, das Skript hat nur im eigenen Verzeichnis operiert.

Da könnte man open_basedir setzen und wäre alle Sorgen los. Geht natürlich nur vor dem Scriptaufruf, weil es im Script nicht mehr erlaubt ist - jedenfalls vor PHP 5.3.0.

Nun habe ich aber eine eben solche Funktion geschrieben. Es funktioniert auch alles soweit, allerdings möchte ich sicherstellen, dass man nicht durch irgendeinen Hack eine Ebene höher kommt, als das Skript liegt. Liegt das Skript also beispielsweise "/var/www/html/upload", soll man nicht "/var/www/html" anzeigen lassen können, aber auch nicht "/var/html/Foo/Bar".

Und das geht effizienter, indem man mit realpath() den vollständigen Pfad ermittelt, den der Anwender erreichen will. Von der (magischen) Konstante __FILE__ ermittelt man den dirname() oder nimmt ab PHP 5.3 gleich __DIR__. Wenn das der Anfang vom realpath()_Ergebnis ist, ist alles in Ordnung.

Ich wollte jetzt von euch wissen, wie SICHER ist diese Methode der Überprüfung? Sieht jemand schon auf den ersten Blick einen Hack oder eine Injection?

Hast du mal einige Szenarien mit absoluten (/...) und relativen (../../...) Angaben durchgespielt?

Lo!