PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei Upload bestimmte Dateitypen abfangen


Lütti
31.05.2006, 23:03:35
Hallo,
hab mich gerade hier angemeldet weil ich nicht weiterkomme.
Habe einen FTP Upload und möchte nun verhinden das bestimmte Dateitypen, wie zb. php Scripte oder sonstige Scripte die schaden anrichten könnten, hochgeladen werden.
Nun weiß ich schon so viel, dass man mit dem Array $_FILES['Dateiname']['type'] den MIME-Typ abfragen kann.

Allerdings hab ich nirgendwo gefunden wie man das oben beschriebene Problem lösen kann.

Hoffe ihr bring dem Abhilfe.
Vielen Dank
Sven L.

Serp
01.06.2006, 00:24:24
Also, wenn das ein wirklicher Upload per FTP ist, dann kannst du das gar nicht so wirklich verhindern - da lässt sich nämlich alles hochladen. Ich vermute also eher, dass du nen Upload per Formular hast, richtig?

In diesem Fall ist die Frage, ob du alles hochgeladen haben willst, was irgendwie geht (bis auf böse Scripte) oder nur ganz bestimmte Sachen (z.B. Bilder). Wenns nur Bilder sein sollen tust du dich relativ einfach, da du dann wirklich nur auf die MIME-Typen schauen musst.
Ansonsten würd ich in diesem einen Fall auch empfehlen, auf die Dateiendung zu schauen. Wenn du alles ausfilterst, das ne Endung hat, die von deinem Webspace durch den PHP-Parser geschickt wird, ist das schon mal ein ganz guter Anfang. Den Rest, den du nicht haben willst, kannst du dann wiederum über MIME ausfiltern.
Allerdings, sollte das Script auf ner Unix-Kiste liegen, dann kannst du auch ganz einfach mal per chmod das Execute-Recht wegnehmen. Dann lässt sich das Script nicht mehr ausführen und es kann eigentlich nicht mehr viel passieren - sofern meine Vorstellung von Unixartigen Betriebssystemen jetzt nicht völlig Banane ist...

Gamerfun
02.06.2006, 16:27:20
Du könntest die Erweiterungen, die erlaubt sind in einen Array angeben und sie dann mit ?in_array? abfragen.
Weiss jetzt nicht ob die Funktion in_array() heist.

Serp
02.06.2006, 17:07:30
Genau das funktioniert nicht so einfach. Denn eine Datei kann jede beliebige Dateiendung haben, was drin ist steht auf nem ganz anderen Papier. Insbesondere Linux schert sich im Großen und Ganzen nen Dreck um Dateierweiterungen. Wenn ne Datei ausgeführt werden darf, dann kann man das mit Linux auch versuchen - wenns keine ausführbare Datei war, na ja, dann gehts halt einfach nicht.

Wenn du jetzt also prinzipiell z.B. jpg´s zulässt und dir schiebt einer n jpg aufn Server, das in Wirklichkeit n böses Script ist und schaffts dann auch noch, das auszuführen - dann hast du ein Problem. Darum ja mein Vorschlag: Alle Dateierweiterungen ausfiltern, die vom Apache irgendwie speziell ausgeführt werden (der guckt nämlich auf die Dateierweiterung), und ansonsten entweder ungewollte MIME-Typen blocken oder gleich das Execute-Recht kollektiv entfernen. Solang die User dann keinen Zugriff auf chmod-Funktionen haben, kann dann eigentlich nix mehr passieren.

PS: Wichtig für die Liste der unerwünschten Dateien: .htaccess und .htpasswd!

meikel (†)
03.06.2006, 01:04:43
Nun weiß ich schon so viel, dass man mit dem Array $_FILES['Dateiname']['type'] den MIME-Typ abfragen kann.
1. Die Angabe stammt vom Client, ist also unzuverlässig.
Den tatsächlichen MIME Type fragt man mit mime_content_type() ab.

2. Die Extension bekommst Du von pathinfo().

3. achte darauf, daß Du keine Files mit dem execute Flag (0755, 0775, 0777) erzeugst.

4. es ist ratsam, in dem Verzeichnis das Parsen von PHP Files auszuschalten:
lokale php.ini:
engine = Off

.htaccess
php_flag engine off
Allerdings hab ich nirgendwo gefunden wie man das oben beschriebene Problem lösen kann.
Dafür gibt es keine Komplettlösung.

Lütti
09.06.2006, 11:11:31
Danke Meikel genau danach habe ich gesucht. Kannte die Fkt. pathinfo() gar net. Naja alles klar damit kann ich ja jetzt bequem die Dateierweiterungen herausfiltern. Habs auch schon getestet und es funktioniert.

Danke allerseits.
Grüße Sven