Bernd: Ordner nur JPG zulassen

Ist es möglich, einen Ordner nur für das Upload von JPG zuzulassen. So das andere Dateien nicht gepsiechert werden.

Bernd

  1. Hello,

    wenn man genauer darüber nachdenkt, dann kann der wahre Typ einer Datei erst ermittelt werden, wenn sie vollständig im Reich des Zielhosts angekommen ist. Je nach Methode kann sie dann im Speicher, in einem temporären Verzeichnis, oder im endgültigen Verzeichnis liegen.

    Wenn Du also den Upload erst in ein Zwischenverzeichnis durchführst, kannst Du die Datei dann prüfen und nur *.jpg-Dateien übertragen ins Zielverzeichnis.

    Mit PHP und HTTP ist das übrigens (fast) das benutzte Verfahren.

    Beachte aber, daß auch *.jpg-Dateien noch Schadcode enthalten können.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Hallo Tom,

      Beachte aber, daß auch *.jpg-Dateien noch Schadcode enthalten können.

      Meinst du so etwas? – In dem Fall hat man auf dem Server den Fehler gemacht, den vom Nutzer vergebenen Dateinamen inklusive Endung zu übernehmen. Mit einem zufälligen Dateinamen mit jpg als Dateiendung wie beispielsweise e807f1fcf82d132f.jpg wäre das nicht passiert.

      Gruß
      Julius

      1. Hello,

        Beachte aber, daß auch *.jpg-Dateien noch Schadcode enthalten können.

        Meinst du so etwas? – In dem Fall hat man auf dem Server den Fehler gemacht, den vom Nutzer vergebenen Dateinamen inklusive Endung zu übernehmen. Mit einem zufälligen Dateinamen mit jpg als Dateiendung wie beispielsweise e807f1fcf82d132f.jpg wäre das nicht passiert.

        Nein, ich meinte das noch eine Stufe schärfer: "kann der wahre Typ einer Datei erst ermittelt werden" ...
        und trotzdem kann noch Schadcode enthalten sein. Bei JPG-Dateien ist das locker innerhalb der EXIF-Header möglich. Man muss dann nur noch eine Möglichkeit finden, diese Datei zu laden und ab einer bestimmten Stelle parsen zu lassen.

        Ob es sich um eine gültige Grafikdatei handelt, kann man bei PHP so leidlich mit getimagesize() ermitteln. Mir ist da bisher noch keine Nicht-Bild-Datei durchgehuscht, was aber keinesfalls Absolutheitsanspruch hat!

        Für per HTTP/s erreichbare Bilder/Dokumenten-Verzeichnisse sollte man immer alle Interpreter und Shells ausschalten!

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Hallo Tom,

          Beachte aber, daß auch *.jpg-Dateien noch Schadcode enthalten können.

          Meinst du so etwas? – In dem Fall hat man auf dem Server den Fehler gemacht, den vom Nutzer vergebenen Dateinamen inklusive Endung zu übernehmen. Mit einem zufälligen Dateinamen mit jpg als Dateiendung wie beispielsweise e807f1fcf82d132f.jpg wäre das nicht passiert.

          Nein, ich meinte das noch eine Stufe schärfer: "kann der wahre Typ einer Datei erst ermittelt werden" ...

          Schon klar, um die Datei untersuchen zu können, muss man sie temporär, aber von außen unzugreifbar auf dem Server haben. Wenn sie aber gründlich untersucht und dann ggf. verworfen wurde, ist das Ergebnis quasi „Nicht hochgeladen“ (bzw. nicht dauerhaft gespeichert) oder „Hochgeladen“ (bzw. dauerhaft gespeichert).

          und trotzdem kann noch Schadcode enthalten sein. Bei JPG-Dateien ist das locker innerhalb der EXIF-Header möglich. Man muss dann nur noch eine Möglichkeit finden, diese Datei zu laden und ab einer bestimmten Stelle parsen zu lassen.

          Genau das, bzw. vorbeugende Maßnahmen habe ich ja (auch mit dem Link zu Golem) beschrieben.

          Für per HTTP/s erreichbare Bilder/Dokumenten-Verzeichnisse sollte man immer alle Interpreter und Shells ausschalten!

          Und dann noch auf Nummer sicher gehen und keinesfalls den Nutzer den zum Speichern verwendeten Dateinamen bestimmen lassen.

          Gruß
          Julius

          1. Hello,

            Für per HTTP/s erreichbare Bilder/Dokumenten-Verzeichnisse sollte man immer alle Interpreter und Shells ausschalten!

            Und dann noch auf Nummer sicher gehen und keinesfalls den Nutzer den zum Speichern verwendeten Dateinamen bestimmen lassen.

            ".htaccess" wäre ganz nett 😉

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es!
            Das Leben selbst ist der Sinn.
  2. Hallo Bernd,

    du müsstest noch angeben, wie du die Dateien hochlädst (höchstwahrscheinlich über HTTP, man könnte es aber auch per (S)FTP oder SSH/SCP machen). Wahrscheinlich geschieht dies über eine Webseite mit einer Server-seitigen Verarbeitung – beispielsweise mittels PHP – also über HTTP.

    Für den Fall, dass es sich um PHP handelt, solltest du dir die Funktion getimagesize anschauen. Sie gibt dir ein Array mit Informationen zu der Bilddatei zurück, sofern es sich bei der angegebenen Datei überhaupt um eine solche handelt.

    Ohne deinen konkreten Anwendungsfall zu kennen, wäre zu überlegen, nicht auch PNG zu erlauben, das für Screenshots und Zeichnungen aufgrund der verlustfreien Kompression besser geeignet wäre.

    Gruß
    Julius

    1. @@Julius

      Ohne deinen konkreten Anwendungsfall zu kennen, wäre zu überlegen, nicht auch PNG zu erlauben, das für Screenshots und Zeichnungen aufgrund der verlustfreien Kompression besser geeignet wäre.

      Dann auch SVG.

      LLAP 🖖

      --
      “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
      1. Hallo Gunnar,

        Ohne deinen konkreten Anwendungsfall zu kennen, wäre zu überlegen, nicht auch PNG zu erlauben, das für Screenshots und Zeichnungen aufgrund der verlustfreien Kompression besser geeignet wäre.

        Dann auch SVG.

        Gibt es da nicht Sicherheitsprobleme, weil man da – im Gegensatz zu PNG und JPG – JavaScript einbetten kann (deshalb hatte ich SVG auch ausgelassen)? Bei der Einbindung über das img-Element werden zwar keine Scripte in der SVG ausgeführt, allerdings kann man die SVG ja auch alleine aufrufen und dann werden sie schon ausgeführt. Was helfen würde, wäre eine andere Domain für die SVGs, passende Angaben beim Cookie setzen (nicht per JS auslesbar machen, über die Path-Angabe auf die Nicht-SVG-Subdomain beschränken). Dann muss man bei Server-seitiger Verarbeitung der SVG (z.B. Rendern) noch aufpassen, dass man keine Probleme mit XXE bekommt.

        Im Prinzip dürfte ein SVG-Upload machbar (siehe Wikipedia/Wikimedia) sein, erfordert aber im Vergleich zu Pixel-Grafiken mehr Aufwand bei der Konfiguration. Wahrscheinlich erlaubt WordPress aufgrund dieser Unwägbarkeiten standardmäßig nicht den Upload von SVG-Dateien.

        Gruß
        Julius

        1. Hallo Ingrid,

          Wahrscheinlich erlaubt WordPress aufgrund dieser Unwägbarkeiten standardmäßig nicht den Upload von SVG-Dateien.

          Ist wohl (vernünftigerweise) so.

          Es gibt aber eine PHP-Bibliothek, die SVGs filtern kann, und ein passendes WordPress-Plugin, falls das jemanden interessiert.

          Gruß
          Julius