Hello Martin,
tief einatmen ...
*eins-zwei-drei-vier-fünf-sechs-sieben-acht-neun-zehn*
und ausatmen. Jetzt besser? :-)
Besser ;-)
Meine Frage war doch nicht, was dokumentiert ist, sondern, wie die die Funktion das "uploaded" feststellt.
War mir klar, dass du auf das "wie" hinaus wolltest. Deswegen habe ich nochmal im Quellcode gewühlt. So ganz bin ich noch nicht dahintergekommen, aber es scheint so, als ob beim eigentlichen Upload (also noch bevor das Script gestartet wird) über den Namen jeder Datei, die hochgeladen und mit einem Zufallsnamen im temp-Verzeichnis abgelegt wurde, ein Hash berechnet und abgelegt wird.
Und move_uploaded_file() überprüft dann genau wie is_uploaded_file(), ob die Datei mit dem angegebenen Namen existiert, ob ein Hash dazu existiert, und ob er mit dem Dateinamen zusammenpasst.
Wenn sich das jetzt ein wenig vage anhört, dann liegt es daran, dass ich den Ablauf auch noch nicht so ganz begriffen habe.
Jetzt dämmert es mir, was die sich dabei gedacht haben könnten. In einer Shared-Hosting-Umgebung wäre es denkbar, dass ein Administrator keine Ahnung hatte von PHP- und Domaineinrichtung, und das Upload-Tmp-Dir daher auf /tmp liegt - für alle Domains gemeinsam.
Da wäre es also möglich, dass jemand mein gerade hochgeladenes File im Temporärverzeichnis manipuliert, bevor ich es verschoben habe in meinen Account. Das geht aber nur bei der Modulversion. Bei der (Fast-)CGI-Version gehört die Datei einem getrennten Prozess pro Request und kann nur vom Eigentümer verändert werden (t-Flag) http://en.wikipedia.org/wiki/Sticky_bit (da steht allderings nichts von Schreibrechten, sondern nur vom Namen *?*).
Wenn der Hash nicht mehr zur Datei passt, hat jemand gefummelt.
Bei Linux-Systemen sollte das bei Verwendung der Standardeinstellungen nicht möglich sein
(Wo steht es im Quellcode? Wenn es jemand verlinken kann, brauch ich nicht erst lange zu suchen, sonst fang ich heute Nacht vielleicht damit an...)
In ./ext/standard/basic_functions.c ab Zeile 5787 (für PHP 5.3.6).
Da schaue ich nachher nochmal genauer nach, ob ich das verstehe. Ich muss auch immer etwas kämpfen. Wir sollten uns mal von Christian Seiler einen Crashkurs geben lassen. Der wäre mir auch etliche Euronen wert :-) Alternativ beantrage ich Gehirn-Cloning ;-P
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg