Hello,
ja genauso hab ich es gemacht.
Alsoif(isset(..['error']) && ... === '0')...
Die Dateien werden aber vorher schon auf den Mimi-Typ geprüft, wobei das natürlich auch nicht 'sicher' ist. Dann sind bis jetzt nur 5 Dateitypen erlaubt (pdf, doc, jpg, gif, png) und die Dateien werden auf dem Server umbennant.
Bilder kannst Du mit Hilfe von getimagesize()
http://de.php.net/manual/en/function.getimagesize.php
relativ sicher erkennen. Ich habe es bisher noch nicht geschafft, ein Nicht-Bild durchzubringen.
Es können in den Bildern aber immer noch Daten/Viren versteckt sein.
Den MIME (Multipurpose Internet Mail Extension)-Typ einer Datei musst Du auf dem Server selber feststellen. Der vom Client mitgelieferte kann gelogen sein. Und da wird es spätestens schwierig. Dir gute alte Funktion mime_content_type() http://de.php.net/manual/en/function.mime-content-type.php ist angeblich angekündigt für spätere PHP-Versionen. Sie hat auf LINUX-Plattformen immer ausreichend zuverlässig den Typ ermittelt. Die als Ersatz genannte PECL extension Fileinfo ist sehr viel fehlerträchtiger und außerdem komplizierter in der Benutzung.
Es ist also immer ratsam, die Dateien auf jeden Fall in einem Verzeichnis abzulegen, dass von PHP (und anderen Parsern) nicht geparst wird.
Also
1. ['error'] prüfen
2. MIME-Type feststellen
3. Dateinamen untersuchen und ggf. bereinigen.
Besser noch, unter einem eingenen Namen ablegen und
den mitgelieferten Wunschnamen in der Datenbank oder einer Datei dazu merken
4. Namen, wie .htaccess, php.ini, usw, auf jeden Fall verhindern
5. Ablegen der Datei nur in einem nicht geparsten Verzeichnis veranlassen
6. Zu den Dateien immer eine Referenz bilden, WER sie hochgeladen hat
7. keine anonymen Uploads zulassen
8. IP, Zeitpunkt und Forwarder-IP (falls vorhanden) für den Upload speichern in einem
für normale User unerreichbaren Logfile, am besten auf einem gesonderten Logserver
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg