Hello Sven,
Das Problem ist:
Du erklärst in gewisser Selbstherrlichkeit die Funktion move_uploaded_file() für obsolet, im Widerspruch zur geschriebenen Dokumentation und der herrschenden Meinung, aber du bietest keinerlei Alternative an, wie das, was die Funktion tut, nach deiner Meinung zu realisieren sei.
Das Problem ist, dass hier eine Diskussion untgerdrückt werden soll. Warum eigentlich?
Dein Ansatz, das Stück Quellcode zu move_uploaded_file() herauszusuchen, ist doch mMn der bessere Weg.
Und ich habe es sehr wohl erklärt, wie Ersatz zu leisten ist.
Durch die Absicherung des Arrays $_FILES, das offiziell erst _nach_ den Funktionen *_uploaded_file() eingeführt worden ist, ist der Dateiname für hochgeladene Files im Element $_FILES[<name>]['tmp_name'] sicher. Er wird vom System vergeben und ist nicht mehr von Usereingaben manipulierbar. Das war mit den Scriptvariablen zum Upload nicht der Fall. Das Problem mit register_globals ist ja hinlänglich bekannt.
Ein File, dass im Array $_FILES benannt wird, _muss_ also ein uploaded File sein.
Die übrigen von dir genannten "Sicherheiten" werden von den Filefunktionen
- fopen
- flock
- fread
- fwrite
ebenfalls (sinngemäß) erfüllt.
Die einzige Abweichung ist, dass in der "Liste der hochgeladenen Files", die im $_FILES-Array geführt wird, das File nach dem Auslesen nicht gelöscht wird.
Welchen Sicherheitsaspekt das bringen sollte, dass man das Temp-File nur einmal kopieren darf, kann ich mir auch nicht vorstellen.
Ich werde trotzdem versuchen, den zugehörigen Codeabschnitt zu $_FILES zu finden um zu schauen, was da noch unsicher sein kann.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg