Hallo TS,
Das Upload-Verzeichnis dient gewissermaßen als Sandbox: die Datei wird erstmal an eine Stelle geschoben, an der sie nicht viel Schaden anrichten kann.
Das gilt (im shared Hosting, Modul) nur, wenn das Uploadverzeichnis pro Domain getrennt geführt wird. Anderenfalls kann der Inhalt der Datei auch von Anderen geändert werden, solange sie dort liegt.
Hmm, und wenn das Sticky-Bit gesetzt und nur ich (bzw. mein mit meinen Benutzerrechten laufender PHP-Interpreter) die Datei lesen oder schreiben darf?
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. 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.Das kann ich jetzt leider nicht so schnell überprüfen. Du meinst also, dass man das
upload_tmp_dir
außerhalb desopen_basedir
-Bereiches und derDocumentRoot
legen kann, und der Upload trotzdem funktioniert? Undmove_uploaded_file()
darf dann als einzige PHP-Dateifunktion (vermutlich nur lesend?) auf dieses Verzeichnis und das Directory dieses Verzeichnisses (schreibend, zum Löschen) zugreifen?
move_uploaded_file() is both safe mode and open_basedir aware. However, restrictions are placed only on the destination path as to allow the moving of uploaded files in which filename may conflict with such restrictions. move_uploaded_file() ensures the safety of this operation by allowing only those files uploaded through PHP to be moved.
Gruß
Julius