Hello,
Das wird schwierig. Ich gehe davon aus, dass es sich nicht um ein System fuer nur einen User handelt. Es wird also wahrscheinlich ein neuer Bildname erstellt, wenn ein Bild hochgeladen wird, denn jeder User kann ein Bild lolcat.jpg hochladen - trotzdem sind die Bilder unterschiedlich. Die Dinger koennen auch aus unterschiedlichen verzeichnissen kommen... Woran erkennt man nun, dass ein Bild schon vorhanden ist?
Das sollte man dann vielleicht auch pro User verwalten.
Ich wuerd im Uploadformular vielleicht nen timestamp unterbringen. Wenn der in der Session schonmal da war, stimmt was nicht.
Das wäre eine Möglichkeit.
Aber warum sollte der User dasselbe Bild zweimal hochladen (besser: speichern) müssen? Dagegen hilft doch tatsächlich eine Prüfsumme. Allerdings schützt das immer noch nicht vor unnötigem Traffic, denn die Prüfsumme kann ja erst erstellt werden, wenn das Bild auf dem Server angekommen ist.
Wichtig erscheint mit aber, dass das Bild z.B. mit getimagesize() auf seinen Typ geprüft wird, es nur angenommen wird, wenn der Typ auch stimmt und der Name keinesfalls 1:1 aus einer Usereingabe übernommen wird, sondern auf jeden Fall die Extension gemäß der Auskunft von getimagesize() richtgestellt wird auf dem Server und im Basisnamen keinerlei Pfadbegrenzer akzeptiert werden!
Außerdem sollte man für das per HTTP/s erreichbare Ablageverzeichnis im Dateisystem sämtliche Scriptparser und Executable-Flags ausschalten.
Der User könnte sonst ein Bild unter dem Namen "image.php" hochladen, dass von getimagesize() tatsächlich noch als JPEG erkannt wird, also abgespeichert werden würde...
Wenn man jetzt aber konsequent die Dateiendung richtigstellt (also den Namen zu "image.jpg"), würde das Bild zumindest nicht mehr automatisch durch den Parser gejagt werden.
JPEG-Images können Code enthalten, der auch tatsächlich ausgeführt werden würde...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
