Fileinfo / mime_content_type

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Fileinfo / mime_content_type

    Hallo allerseits,

    ich versuche momentan einen einigermaßen sicheren Uploadschutz zu programmieren, der alle gängigen Exploits berücksichtigt. Auf meinem Server läuft die aktuelle Version von PHP5 (5.2.8) inkl. zahlreicher Module. Ich habe nun PHP mit Unterstützung für mime_content_type kompiliert und die korrekten Einstellungen in der php.ini gesetzt. Die Funktion arbeitet laut phpinfo() einwandfrei. Im Echtbetrieb liefert sie aber nur false zurück. Laut diverser Bugeinträge soll man daher auf die PECL (ab PHP5.3 nativ enthaltene) Erweiterung Fileinfo bauen. Diese habe ich nun per PECL installiert, jedoch heißt es immer, die Funktionen könnten nicht gefunden werden (finfo_open z.B. - oder auf new finfo();). Bei der Installation der Erweiterung treten aber keine Fehler auf und in der php.ini ist die .so-Datei korrekt eingebunden. Weiß jemand Rat?

    Liebe Grüße,
    Philipp
  • Ich habe die Erweiterung nun noch einmal gelöscht, alle Abhängigkeiten kontrolliert, sie nochmal per PECL installiert und nun geht es. Versteh das einer...

    Aber, Vince, ich habe gleich noch eine Frage! :)

    Wenn ich Fileinfo wie in der Dokumentation verwende, z.B. mit folgendem Code, kommt als Ausgabe kein MIME-Code raus, sondern ein schöner Text, der mir beschreibt, was für eine Datei das ist. Da ich leider nicht mit Volltext-Hinweisen arbeiten wollte, sondern gerne die Kurzform hätte, nützt mir das nichts. Kennst Du das Verhalten?

    Quellcode

    1. $finfo = new finfo(FILEINFO_MIME);
    2. $mime_type = $finfo->file('/var/www/.../public/index.html');
    3. var_dump($mime_type);
    4. # bekommen: string(18) "HTML document text"
    5. # erwartet: string(9) "text/html"
  • Hallo,

    Da das ZendFramework das alles kann, schau mal in das Repository das ist in mancher hinsicht die reinste Goldgrube: framework.zend.com/svn/framewo…alidate/File/MimeType.php
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hallo,

    danke für den Hinweis, auch wenn sie es dort nicht anders als bei php.net machen, funktioniert es offenbar nur korrekt, wenn man den Pfad zur magic.mime-Datei vollständig übergibt. Für alle, die irgendwann mal danach suchen und gerne ein funktionierendes Snippet sehen wollen:

    Quellcode

    1. <?php
    2. # Kann je nach System unterschiedlich sein.
    3. define("MAGIC", "/etc/magic.mime");
    4. var_dump(defined('MAGIC'));
    5. # bool(true)
    6. $finfo = new finfo(FILEINFO_MIME, MAGIC);
    7. $mime_type = $finfo->file('/var/www/.../public/index.html');
    8. var_dump($mime_type);
    9. # string(9) "text/html"
    10. ?>
    Alles anzeigen