Mime-Type bei Upload
Matt
- php
0 Matt0 Ingo Turski0 Bessere Lösung
Matt0 Tom0 ChrisB0 Tom0 Vinzenz Mai0 Tom
0 Ingo Turski
Hallo,
bisher überprüfe ich hochgeladene Dateien auf Ihre Endung indem ich die letzten Buchstaben des Dateinamens checke und seit kurzem auch den Mime-Type der hochgeladenen Datei.
Es sollen nur PDFs hochgeladen werden können.
Das Problem:
Mache ich aus einem Word-Dokument (test.doc) ein PDF (umbenennen in test.pdf) lädt das Script es trotzdem hoch und verarbeitet es, obwohl nur die Dateiendung geändert wurde und es sich dabei nicht um ein PDF handelt.
Der Mime-Type wird auch hier als "application/pdf" angegeben - was ja eigentlich nicht sein kann. Oder wird der Mime-Type vom Browser gesendet?
Wie kann ich dieses Problem umgehen? Gibt es eine Funktion um den wirklichen Dateityp zur ermitteln?
Viele Grüße
Wie kann ich dieses Problem umgehen? Gibt es eine Funktion um den wirklichen Dateityp zur ermitteln?
Eine unsaubere Variante wäre die Datei auszulesen und die ersten 4 Buchstaben zu überprüfen, steht dort %PDF, ist es ein PDF ansonsten nicht.
Gibt es andere performantere Lösungen? z.b. mittels einer Extension oder ähnliches?
Danke
Hi,
Eine unsaubere Variante wäre die Datei auszulesen und die ersten 4 Buchstaben zu überprüfen, steht dort %PDF, ist es ein PDF ansonsten nicht.
ich finde das durchaus nicht unsauber. Der - vom Browser gesendete - Mime-Type sagt, ist Du selbst festgestellt hast nur ein Anhaltspunkt. Du musst also den Dateiinhalt prüfen.
Natürlich können auch nicht-PDFs mit %PDF beginnen, aber das dürfte eher selten vorkommen, zumal wenn der Dateiname auf .pdf endet.
freundliche Grüße
Ingo
Hallo Ingo und alle anderen die auf eine performatere Lösung warten.
Ich mache es jetzt so:
Extension magic mime und fileinfo benötigt.
$handle = finfo_open(FILEINFO_MIME, 'C:\Server\Xampp\php\extras\magic');
$mime_type = finfo_file($handle, $dateiname);
Wenn $mime_type nun nicht application/pdf ist, handelt es sich auch _wirklich nicht_ um ein PDF.
Grüße
Hello,
Hallo Ingo und alle anderen die auf eine performatere Lösung warten.
Ich mache es jetzt so:
Extension magic mime und fileinfo benötigt.
Die Extension magic_mime ist inzwischen als sehr unzuverlässig bekannt geworden.
Da war die alte Funktion in PHP noch wesentlich zuverlässiger.
Wenn man zusätzlich sicherstellen wollte, dass das File garantiert _kein_ Executable sein sollte, hat man es noch auf ASCII 0 durchsucht. Ein Executable hat garantiert irgendwo eine. Ich kenne jedenfalls keines ohne.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
.
Hi,
Wenn man zusätzlich sicherstellen wollte, dass das File garantiert _kein_ Executable sein sollte, hat man es noch auf ASCII 0 durchsucht. Ein Executable hat garantiert irgendwo eine. Ich kenne jedenfalls keines ohne.
Und ein PDF hat garantiert keins? (k.A.)
Und bei Bildern o.ae. haeltst du das auch fuer brauchbar?
MfG ChrisB
Hello,
Wenn man zusätzlich sicherstellen wollte, dass das File garantiert _kein_ Executable sein sollte, hat man es noch auf ASCII 0 durchsucht. Ein Executable hat garantiert irgendwo eine. Ich kenne jedenfalls keines ohne.
Und ein PDF hat garantiert keins? (k.A.)
Und bei Bildern o.ae. haeltst du das auch fuer brauchbar?
Habe ich das gesagt? Mach aus meiner Aussage nicht unerlaubter Weise eine umkehrbare.
Ich habe lediglich gesagt, dass ein Executable (compiliertes Programmstück) garantiert irgendwo eine 0 enthält. Darüber hinaus gibt es ja auch noch genügend Arten von Scripten, die hier gefährlich werden können, also Programmtexte, die noch interpretiert werden müssen.
Die gute alte MIMEMAGIC-Funktion war auf jeden Fall verlässlicher als die neue Klasse.
http://www.php.net/manual/en/function.mime-content-type.php
http://forum.de.selfhtml.org/archiv/2007/12/t163692/#m1066040
wobei man an den Rückgabe werten der Funktion noch schnitzen sollte.
Vielleicht ein Bitmuster zurückgeben? Oder ein Array?
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
Hallo Tom,
Die gute alte MIMEMAGIC-Funktion war auf jeden Fall verlässlicher als die neue Klasse.
http://www.php.net/manual/en/function.mime-content-type.php
inwiefern? Die PHP-Leute sind ja anderer Ansicht. [1]
http://forum.de.selfhtml.org/archiv/2007/12/t163692/#m1066040
Freundliche Grüße
Vinzenz
[1] Hatte ich das nicht schon einmal gefragt?
Hello,
Die gute alte MIMEMAGIC-Funktion war auf jeden Fall verlässlicher als die neue Klasse.
http://www.php.net/manual/en/function.mime-content-type.phpinwiefern? Die PHP-Leute sind ja anderer Ansicht. [1]
http://forum.de.selfhtml.org/archiv/2007/12/t163692/#m1066040
Sei bitte so nett, und recherchiere da mal selber in Google und hier im Archiv. Es gibt diverse Links zu Veröffentlichungen, die etliche Fehler aufzeigen. Einige davon habe ich Ende letzten Jahres selber ausprobiert, weil ich es nicht glauben wollte. Es ist unverantwortlich von den PHP-Leuten, dass man sowas propagiert.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
.
Hi,
Und ein PDF hat garantiert keins? (k.A.)
hat es.
freundliche Grüße
Ingo