Hallo 1unitedpower,
Das Upload-Verzeichnis dient gewissermaßen als Sandbox: die Datei wird erstmal an eine Stelle geschoben, an der sie nicht viel Schaden anrichten kann. Es ist dann Aufgabe der Anwendung die Datei zu überprüfen (bspw. auf Mime-Type oder Viren) bevor sie aus der Sandbox an eine andere Stelle verschoben wird.
Notiz an mich selbst: Dieses Prinzip muss ich in dem Tutorial nicht nur implizit vorführen, sondern auch noch einmal explizit erklären.
Die normalen PHP Dateisystem-Funktionen haben ggf. keinen Zugriff auf das Upload-Verzeichnis, wenn es außerhalb des
open_basedir
-Verzeichnisbaums liegt. Deshalb braucht manmove_uploaded_file
als privilegierte Funktion.
Guter Punkt, das hatte ich auch nicht auf dem Schirm, werde ich einpflegen!
Daher ist die von mir vorgestellte Funktion
save_uploaded_file()
auf jeden Fall zielführender. Sie ermöglicht das TOCTTOU-freie Speichern von Dateien mit StatusrückmeldungIch habe gerade im PHP Sourcecode nachgesehen,
move_uploaded_file
benutzt unter der Haube auch den Filelock-Mechanismus. Man muss ein bisschen graben bis man auf diese beiden Zeilen stößt:srcstream = php_stream_open_wrapper_ex(src, "rb", src_flg | REPORT_ERRORS, NULL, ctx) deststream = php_stream_open_wrapper_ex(dest, "wb", REPORT_ERRORS, NULL, ctx);
Der zweite Parameter ist der File-Mode.
An der Stelle im Source-Code war ich auf meiner Recherche tatsächlich auch schon mal, glaube ich, habe aber nicht erkannt, dass das die Dateien lockt. Aus Interesse: Woran machst du das konkret fest? – Am Suffix _ex
, das für exclusive stehen könnte?
Gruß
Julius