Ich entwickle ein einfaches PHP-Upload-Skript und Benutzer können nur ZIP- und RAR-Dateien hochladen.
Welche MIME-Typen sollte ich zur Überprüfung verwenden $_FILES[x][type]
? (eine vollständige Liste bitte)
Danke dir..
php
zip
mime-types
rar
mrdaliri
quelle
quelle
Antworten:
Die Antworten von freedompeace, Kiyarash und Sam Vloeberghs:
Ich würde auch den Dateinamen überprüfen. So können Sie überprüfen, ob es sich bei der Datei um eine RAR- oder ZIP-Datei handelt. Ich habe es getestet, indem ich eine schnelle Befehlszeilenanwendung erstellt habe.
Beachten Sie, dass es immer noch nicht 100% sicher ist, aber es ist wahrscheinlich gut genug.
Aber auch WinRAR erkennt Nicht-RAR-Dateien als SFX-Archive:
quelle
application/x-zip-compressed
zip
oderrar
Datei. Gemäß den WC3-Spezifikationen wird dies wie folgt interpretiert: "Ich bevorzuge einenapplication/zip
|application/x-rar-compressed
Inhaltstyp, aber wenn Sie diesen nicht liefern können, ist einapplication/octet-stream
(Dateistream) ebenfalls in Ordnung."multipart/x-zip
möglicherweise gültig sein? Es ist nicht mehrteilig. Die SitePoint-Liste enthält viele ungenaue MIME-Typen und ist bei weitem nicht vollständig. Die offizielle Registrierung für IANA-Medientypen ist nicht zu 100% vollständig (und wird es wahrscheinlich auch nie sein).Zum Hochladen:
Eine offizielle Liste der MIME-Typen finden Sie bei der Internet Assigned Numbers Authority (IANA) . Entsprechend ihrer
Content-Type
Listenüberschrift fürzip
istapplication/zip
.Der Medientyp für
rar
Dateien ist nicht offiziell bei IANA registriert, aber der inoffizielle häufig verwendete MIME-Wert istapplication/x-rar-compressed
.application/octet-stream
bedeutet so viel wie: "Ich sende Ihnen einen Dateistream und der Inhalt dieses Streams ist nicht angegeben" (es ist also wahr, dass es sich auch um einezip
oder einerar
Datei handeln kann). Der Server soll den tatsächlichen Inhalt des Streams erkennen.Hinweis: Beim Hochladen ist es nicht sicher, sich auf den im
Content-Type
Header festgelegten MIME-Typ zu verlassen . Der Header wird auf dem Client gesetzt und kann auf einen beliebigen Zufallswert gesetzt werden. Stattdessen können Sie die PHP-Datei-Info- Funktionen verwenden, um den MIME-Typ der Datei auf dem Server zu erkennen.Zum Download:
Wenn Sie eine
zip
Datei und nichts anderes herunterladen möchten, sollten Sie nur einen einzigenAccept
Header-Wert festlegen . Alle zusätzlichen festgelegten Werte werden als Fallback verwendet, falls der Server Ihren imAccept
Header angeforderten MIME-Typ nicht erfüllen kann .Gemäß den WC3-Spezifikationen gilt Folgendes :
wird interpretiert als: "Ich bevorzuge einen MIME -Typ, aber wenn Sie dies nicht liefern können, ist ein (ein Dateistream) auch in Ordnung".
application/zip
application/octet-stream
Also nur ein einziger:
Garantiert Ihnen eine
zip
Datei (oder eine406 - Not Acceptable
Antwort, falls der Server Ihre Anfrage nicht erfüllen kann).quelle
Sie sollten nicht vertrauen
$_FILES['upfile']['mime']
, überprüfen Sie den MIME-Typ selbst. Zu diesem Zweck können Sie diefileinfo
Erweiterung verwenden , die standardmäßig ab PHP 5.3.0 aktiviert ist.HINWEIS: Vergessen Sie nicht, die Erweiterung in
php.ini
Ihrem Server zu aktivieren und neu zu starten:quelle
In einer verknüpften Frage gibt es einen Objective-C-Code, um den MIME-Typ für eine Datei-URL abzurufen. Ich habe eine Swift-Erweiterung basierend auf diesem Objective-C-Code erstellt, um den MIME-Typ zu erhalten:
quelle
Da die Erweiterung möglicherweise mehr oder weniger als drei Zeichen enthält, wird im Folgenden unabhängig von ihrer Länge auf eine Erweiterung geprüft.
Versuche dies:
um nach dem letzten '.' nach allen Zeichen zu suchen.
quelle