einzig richtiger Weg, festzustellen ob der FILE ein html File ist?

  • Wie stellt man am besten fest, um was für eine Datei es sich bei $_FILES handelt? Habe bisher viele Wege gefunden, die die Auswertung des MIME-TYPES in sich beziehen, doch ich habe auch oft gelesen, dass der MIME-TYPE sehr leicht zu manipulieren ist. Ich wüsste mir auch weiterzuhelfen, wenn es um images geht, da einfach die Attribute "IMAGE_JPG" / "IMAGE_PNG" nutzen. Leider habe ich sowas nicht für z.B. html Dateien gefunden - "TEXT_HTML" gibt es nicht.


    Wie erkennt man also ausnahmslos jeden Filetype ausnahmslos korrekt?

  • Wenn es um Bilder geht, kannst Du via imagecreatefromstring() prüfen, ob das Format von Deinem System unterstützt wird.

    http://php.net/manual/en/function.imagecreatefromstring.php

    Zitat


    An image resource will be returned on success. FALSE is returned if the image type is unsupported, the data is not in a recognised format, or the image is corrupt and cannot be loaded.

    Ist das Ergebnis false, dann ist es kein Bild (oder unterstütztes Format).



    Geht es um andere Dateien, dann gibt es sicherlich auch ähnliche Möglichkeiten - kommt ja dann aber auf den Typ an.

    Würde das per Typ entscheiden lassen.

    PHP
    // pseudo code
    if isImage(file)
        validateImage(file)
    elseif isPdf(file)
        validatePdf(file)
    elseif ...


    Die Endung|Extension bekommst Du via:

    PHP
    $extension = pathinfo($file, PATHINFO_EXTENSION);

    Gibt auch finfo_file()

    http://php.net/manual/de/function.finfo-file.php



    100% sicher sein kannst Du aber nicht.

    Habe selbst jedenfalls noch keine Möglichkeit gesehen, die alles abdeckt.

  • Ich habe das jetzt mit mime_content_type gelöst. Klappt auch bei html Dateien, aber nicht bei CSS Dateien:


    PHP
    <?php
    if(mime_content_type($_FILES['style-css']['tmp_name']) !== 'text/css') {
    
        echo "no4";
       }
    ?>

    Aus irgendeinem Grund gibt geht es nicht. Kannst Du mir da weiterhelfen?

  • Aus der Doku:

    Wenn man sich diese Datei mal ansieht, wird man festellen, dass CSS-Dateien darin nicht definiert sind. Das hängt wohl damit zusammen, dass es kein eindeutiges Erkennungsmerkmal dafür gibt.

  • Richtig, habe ich in den letzten Stunden auch herausgefunden. Nach langem überlegen habe ich mich entschieden bei der CSS einfach die Dateiendung zu prüfen und gut ist.


    Die Dateien sind sowieso nicht ausführbar und werden nochmals gründlich geprüft, bevor sie "online" gehen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!