![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
...möp...
Registriert seit: 10.10.2005
Ort: Wolfsburg
Beiträge: 78
|
Hi,
ich bin gerade dabei einen Upload zu machen, bei den man Zip-Dateien hochladen können soll. Ich weiß jetzt nur nicht wie ich sicher sein kann, dass es auch wirklich eine Zip-Datei ist. Ich habe es zuerst mit dem Mime-Type versucht, das geht auch so weit. Nur kann man das umgehen, indem man eine beliebige datei nur die Endung .zip gibt, und schon kann man die ohne Probleme hochladen, da der Mime-Typ wie bei einer normalen Zip datei ist. Wie kann ich also wirklich kontrollieren, ob es eine Zip-Datei ist? Gibt es da irgendeine Funktion um das zu kontrollieren? Danke schonmal, Dennis |
|
|
|
|
|
Nach oben #2 |
|
Erfahrener Benutzer
Registriert seit: 10.11.2005
Ort: Schweiz -> Basel
Beiträge: 204
|
Auf die Signatur prüfen?
Code:
Signature 4 (DWORD) Dieser Wert ist immer 0x04034B50 (Hex). |
|
|
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
|
Eventuell kannst du auch die ZIP-Funktionen von PHP nutzen (müssten aber nachinstalliert werden, sofern sie nicht vorhanden sind
think's Methode find ich eigentlich recht elegant.
__________________
http://www.ChrisDiary.De |
|
|
|
|
|
Nach oben #5 |
|
Erfahrener Benutzer
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 296
|
Weiter unten auf der Seite hat es ein Beispiel. Ist zwar C aber grundsätzlich kann man das in PHP auch so umsetzen.
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. |
|
|
|
|
|
Nach oben #8 | |
|
Erfahrener Benutzer
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
|
Zitat:
sind die Inormationen im Request-Header, die vom Borwser gesendet werden, drinne. Vieleicht kann das MIME_Type Package von PEAR helfen. Oder auch die Fileinfo funktionen, die allerdings expliziet über pecl (nach)installiert werden müssten. Es gibt noch mime_content_type, dass aber ab php6 nicht mehr unterstützt wird. |
|
|
|
|
|
|
Nach oben #9 |
|
...möp...
Registriert seit: 10.10.2005
Ort: Wolfsburg
Beiträge: 78
|
Hi,
Die Fileinfo Funktion sieht schonmal gut und einfach aus. Aber ist die funktion auch sicher? Also kann man die nicht irgendwie austricksen? Ansonsten habe ich noch versucht das erste Beispiel in C zu PHP umzusetzen. Aber da bin ich an der stelle gescheitert: ZipHeader Header; Weiß nicht wie ich das mit der variable und wie die im code genutzt wird in php machen soll. Dennis |
|
|
|
|
|
Nach oben #10 |
|
Erfahrener Benutzer
Registriert seit: 12.06.2006
Beiträge: 186
|
Wenn du was gefunden hast, was a) funktioniert und b) keine extra-Software à la PECL erfordert, kannste das dann hier posten?
Oder kann jemand mal versuchen, den C/++-Ansatz mit der Signatur von oben in PHP umzusetzen? Kann selber kein C/++. Ich hab mal ne ZIP-Datei im HexEditor angeschaut, konnte aber diese Bytefolge nirgendwo finden ... |
|
|
|
|
|
Nach oben #11 |
|
Erfahrener Benutzer
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
|
Fileinfo habe ich persönlich nicht getestet gehabt, somit kann ich nicht sagen
wie zuverlässig die Funktionen sind. Auf die Frage ob man es austricksen kann... ich denke schon. Denn es wird an einer bestimmte Stelle nach einem bestimmten Muster/Signatur nachgeschaut. Vor und nach der Signatur muss ja nicht unbeding der zu erwartende Ihnalt sein. Die Frage ist aber, wie kann so eine "falsche" Datei Schaden anrichten. Das hängt von verschiedenen Faktoren ab... wie z.B. wenn die Datei ein PHP-Skript beinhaltet und foo.zip lautet, könnte es zu einer Gefahr kommen wenn:
Wie dem auch sei, der folgende Verweis ist ein nachgebaute mime_content_type funktion. http://www.pberndt.com/Web/PHP/Codes...MIME%20Typ.php Die benötigte magic.mime habe ich als anhang beigelegt, diese ist aber auch bei Apache HTTP-Server dabei. |
|
|
|
|
|
Nach oben #12 | |
|
Erfahrener Benutzer
Registriert seit: 18.03.2005
Beiträge: 586
|
Zitat:
PHP-Code:
|
|
|
|
|
|
|
Nach oben #13 |
|
...möp...
Registriert seit: 10.10.2005
Ort: Wolfsburg
Beiträge: 78
|
hmm...lol.
Sorry, hatte es irgendwie vergessen. So könnte ich es natürlich auch machen. Habe gerade auch noch rausgefunden dass man das auch noch über exec() mit dem hier lösen könnte: exec("unzip -t datei.zip"); wenn es eine echte zip-datei ist, erhält man "No errors....." als rückgabe. Danke nochmal! |
|
|
|
|
|
Nach oben #14 | |
|
BIN EIN KRASSA HELD!!!111
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.184
|
Zitat:
|
|
|
|
|
|
|
Nach oben #19 |
|
Erfahrener Benutzer
Registriert seit: 27.02.2006
Beiträge: 146
|
Unabhängig davon, ob jetzt aktuell eine Schwachstelle in unzip (oder welches Zip-Programm auch immer) untersucht werden soll, ich persönlich halte es im vorliegenden Fall als nicht sinnvoll, unzip über exec heranzuziehen. Das potentielle Risiko ist zu hoch und für die im Start angedachte Lösung in meinen Augen auch übertrieben (Performance, Zeit). Wenn "nur" kontrolliert werden soll, ob das Zip ein "Zip" ist oder nicht, um einen "einfachen" Missbrauch zu unterbinden, sollte der Magic-Code (die ersten 4 Bytes) ausreichen. Für eine sichere Annahme und Weitergabe ist das Szenario nicht geeignet. Grob skizziert: |