Julius: Wiki: Dateiupload mit PHP

Beitrag lesen

problematische Seite

Hallo an alle und Frohe Ostern!

Ich überarbeite gerade in meinem Benutzernamensraum (noch unvollständig, teilweise nur Stichpunkte) den Wiki-Artikel zum Thema Datei Upload mit PHP. Er ist unvollständig, zu umfangreich (drittlängster Artikel im gesamten Wiki!) und zu allgemein, um noch als Tutorial durchzugehen.

Mein Ansatz ist, anhand eines Bilder-Uploads im Stile eines Image-Hosters für die Probleme bei Dateiuploads zu sensibilisieren und eine möglichst einfache und dennoch sichere Lösung vorzustellen. Dabei treffe ich folgende Annahmen:

  • Man kann nur Bilder (JPEG, PNG und GIF) hochladen, diese werden auch mit mime_content_type überprüft (getimagesize bringt keinen Mehrwert, es wird explizit im Manual davon abgeraten, diese Funktion zur Überprüfung von Bildern zu verwenden). SVGs spare ich erst einmal aus, weil die zu riskant sind. Dafür gibt es validierende Libraries, nur erhöht das wieder die Komplexität des Ganzen.
  • Dateinamen werden zufällig erzeugt, man spart sich die ganzen Probleme mit Case-sensitivity, Zeichen oder ganzen Dateinamen mit spezieller Bedeutung.
  • Uploads werden außerhalb des Document-Roots gespeichert – gibt es eigentlich wirklich Webhoster, bei denen das nicht geht?
  • Bei der Auslieferung über ein PHP-Skript wird der Header X-Content-Type-Options: nosniff gesetzt.

Mir ist bewusst, dass dies eine ähnliche Diskussion wie mit dem Loginsystem Anno 2016 ist. Nur halte ich das Risiko hier für besser beherrschbar und irgendwo muss man auch mal erklären, wie man einen Dateiupload grundsätzlich sicher umsetzt. Das Web ist voll von halbgaren Lösungen, auf die sonst zurückgegriffen würde (diese ist davon noch die am wenigsten unsicherste – der Nutzer kann den Dateinamen bestimmen, Dateien werden direkt vom Webserver ausgeliefert, URL-Parameter mit dem Dateinamen landet ohne wirklich tiefgehende Überprüfung in einem HTTP-Header, bei Nichtvorhandensein der zur Überprüfung verwendeten Funktion exif_imagetype wird die Datei einfach ohne Überprüfung hochgeladen, MIME-Type wird nicht mittels mime_content_type o. ä. überprüft) und die sich auch selten korrigieren lassen, weil es sich nicht um Wikis handelt oder Autoren nicht reagieren (gelegentlich schreibe ich bei so etwas die Autoren an, aber meist ist das schlicht Zeitverschwendung).

Und nun zuletzt meine Frage: Meint ihr, dass dieser Artikel ins Wiki passen würde? Ich habe Bedenken, dass er am Ende wie das Loginsystem damals entfernt wird und die Arbeit letztlich für die Katz war.

Gruß
Julius

3 52

Wiki: Dateiupload mit PHP

Julius
  • php
  • selfhtml-wiki
  • sicherheit
  1. 0
    dedlfix
    1. 0
      Matthias Scharwies
      1. 2
        Julius
    2. 3
      Julius
      1. 1
        TS
        1. 0
          1unitedpower
          1. 1
            Julius
            1. 0
              1unitedpower
              1. 0
                TS
                1. 0
                  1unitedpower
          2. 0
            robertroth
            1. 3
              Raketenquellsuchsystem
              1. 0

                Wiki: Dateiupload mit PHP (Verständlichere Ergänzung)

                Raketenquellsuchsystem
              2. 2
                robertroth
                1. 0
                  Raketenquellsuchsystem
                2. 1
                  Rolf B
          3. 1
            TS
            1. 0
              1unitedpower
              1. 1
                TS
                1. 0
                  1unitedpower
                2. 1
                  robertroth
                  • idee
                  • php
                  • sicherheit
            2. 1
              Julius
              1. 2
                TS
                1. 2
                  Julius
                  1. 0
                    TS
            3. -1
              Raketenstarter
              1. -1
                Raketenstarter
      2. 0
        dedlfix
  2. 1
    Gunnar Bittersmann
    • grafik
    • grafik
    • selfhtml-wiki
    1. 0
      Der Martin
      1. 0

        webp-Konverter <.->

        Raketenwilli
        1. 0
          Der Martin
          • grafik
          • grafik
          1. 0
            Raketenwilli
            • produktinfo
            1. 0
              Der Martin
              • humor
              • produktinfo
          2. 0
            Raketenwilli
    2. 2
      dedlfix
  3. 2
    Matthias Apsel
    1. 2
      Julius
  4. 2
    Felix Riesterer
    1. 4
      Julius
  5. 0
    1unitedpower
    1. 1
      Julius
  6. 2
    Julius
    1. 0
      TS
      1. 1
        Julius
        1. 0
          TS
          1. 0
            Tabellenkalk
            1. 0
              TS
              1. 0
                raketenquelltextleser
                1. 1
                  Julius
                  • php
                  • sicherheit
              2. 1
                Julius