1unitedpower: Wiki: Dateiupload mit PHP

Beitrag lesen

problematische Seite

Das Upload-Verzeichnis dient gewissermaßen als Sandbox: die Datei wird erstmal an eine Stelle geschoben, an der sie nicht viel Schaden anrichten kann.

Das gilt (im shared Hosting, Modul) nur, wenn das Uploadverzeichnis pro Domain getrennt geführt wird. Anderenfalls kann der Inhalt der Datei auch von Anderen geändert werden, solange sie dort liegt.

Das ist ein zusätzlicher Aspekt.

Es ist dann Aufgabe der Anwendung die Datei zu überprüfen (bspw. auf Mime-Type oder Viren) bevor sie aus der Sandbox an eine andere Stelle verschoben wird. Die normalen PHP Dateisystem-Funktionen haben ggf. keinen Zugriff auf das Upload-Verzeichnis, wenn es außerhalb des open_basedir-Verzeichnisbaums liegt. Deshalb braucht man move_uploaded_file als privilegierte Funktion.

Das kann ich jetzt leider nicht so schnell überprüfen. Du meinst also, dass man das upload_tmp_dir außerhalb des open_basedir-Bereiches und der DocumentRoot legen kann, und der Upload trotzdem funktioniert? Und move_uploaded_file() darf dann als einzige PHP-Dateifunktion (vermutlich nur lesend?) auf dieses Verzeichnis und das Directory dieses Verzeichnisses (schreibend, zum Löschen) zugreifen?

Genau.

Ich habe gerade im PHP Sourcecode nachgesehen, move_uploaded_file benutzt unter der Haube auch den Filelock-Mechanismus. Man muss ein bisschen graben bis man auf diese beiden Zeilen stößt:

Darum ging es aber bei der ganzen Debatte gar nicht. Außerdem war die mögliche Sicherheitslücke, dass man aus Arglist einen fremden Dateinamen als Source untergeschoben bekommen hatte (in $HTTP_POST_FILES), duch Einführung von $_FILES erledigt.

Deshalb habe ich ja auch nochmal gefragt von welcher Lücke du sprichst. $HTTP_POST_FILES ist, soweit ich das erkennen kann, nur ein missbilligter Alias für $_FILES. Vielleicht war das früher mal anders.

Also ist es möglich, auch eine eigene Move-, bzw. Save-Funktion zu erstellen, die auch sicher ist und den Zusatznutzen den von mir vorgestellten aufweist:

Sie überschreibt nicht einfach vorhandene Dateien im Zielverzeichnis, wenn man dies nicht wünscht.

Ja, das ist ein guter Punkt.

und insbesondere erspart sie beim Zusammenwirken mit Datenbanken an dieser Stelle wieder Overhead. •••

Wie das?

Wenn ich Dateiinhalte nicht in der Datenbank speichern will (sollte man ja meistens nicht tun), sonden eben als Flatfiles, dann muss ich mir in der DB aber zumindest den Namen der Datei merken. Wenn der aber gleich bleiben kann, muss ich in der Datenbank nichts ändern. Ich erspare mir dort also den Schreibvorgang.

Bei move_uploaded_file kannst du den Namen der Zieldatei auch frei wählen, da sehe ich jetzt keinen Vorteil.

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