Sven Rautenberg: Sicherheit beim Upload

Beitrag lesen

Moin!

Nur die *_uploaded_file()-Funktionen prüfen, ob der darin angegebene Dateiname tatsächlich von einem Upload im aktuellen Skriptaufruf stammt. Diese Prüfung ist durch keine Alternative innerhalb von PHP-Code zu ersetzen.

Du willst also sagen, dass $_FILES nach Belieben von anderen Instanzen manipuliert werden kann?

Das will ich nicht sagen, aber Fakt ist: In $_FILES steht einfach nur ein Dateiname drin, und dieser Wert ist nicht schreibgeschützt. Wenn also irgendwo eine Code-Injection passieren kann, entweder als manipuliertbare Sicherheitslücke oder durch unbewußte Schadcodeeinschleppung (z.B. Installation eines bösartigen Plugins), ist dieser Wert genauso gefährdet.

Man wird bei objektorientierter Programmierung $_FILES in der Regel auch nicht direkt als "global state" innerhalb einer für das Prüfen und Verschieben von Dateien zuständigen Klasse verwenden, sondern in der Regel einem Request-Objekt alle zugehörigen Superglobalen als Dependency übergeben. $_FILES ist zu diesem Zeitpunkt also längst nicht mehr der Name der Datenstruktur, die der Verschiebecode tatsächlich benutzt. Und deshalb geht dir der Aufmerksamkeitsfaktor von $_FILES = "Hier gehts um hochgeladene Dateien" verloren, weil vermutlich nur noch ein $tmpfile in ein $targetfile kopiert wird - was mit move_uploaded_file() nur dann funktioniert, wenn die Datei tatsächlich hochgeladen war, egal ob der Dateiname ursprünglich aus $_FILES kam, oder sonstwoher.

Das genau zeichnet doch aber $_FILES, $_GET, $_POST, ... aus, dass das eben nicht mehr möglich ist. Die Arrays werden im ausschließlichen Einflussbereich des Scriptes gespeichert und sollten keinerlei Manipulation mehr ermöglichen.

http://www.google.de/search?q=php+remote+code+exection+vulnerability

Ja, man wird drüber streiten können, ob es bei solch einer Lücke tatsächlich noch notwendig ist, irgendwelche Uploads auf existierende, interessante Dateien umzubiegen - aber das Argument, es sei keinerlei Manipulation mehr möglich, das ist falsch. Von "außen" (parallel laufende Skripte etc.) eher nicht (ungeschützer fremder Speicherzugriff auf den Variableninhalt von $_FILES sei mal auszuschließen), aber im laufenden Skript selbstverständlich.

Da die Werte

  • $_FILES['uploadfilename']['error']
  • $_FILES['uploadfilename']['tmp_name']
  • $_FILES['uploadfilename']['size']

vom Server angelegt werden, sollten sie sicher sein!

In der ersten Zeile an Position 0 des ausgeführten Skripts: Ja. Danach nicht mehr.

Anderenfalls zeig mir bitte die Stelle, an der fremde Instanzen noch Zugriff darauf hätten. Dann hätten wir diese ganze Diskussion tatsächlich abkürzen können!

https://forum.selfhtml.org/?t=206726&m=1403987

Deine Reaktion darauf... naja. Sachliche Diskussion ist was anderes.

- Sven Rautenberg

0 133

Sicherheit beim Upload

Nelly
  • php
  1. 0
    Tom
    1. 1
      ChrisB
      1. 0
        Tom
        1. 0
          ChrisB
          1. 0

            $_FILES[<name>]['tmp_name']

            Tom
            • menschelei
            1. 0
              ChrisB
              1. 0
                Tom
                1. 0
                  ChrisB
                  1. 0

                    Dateiupload, was tut move_uploaded_file() wirklich?

                    Tom
                    • php
                    1. 0
                      ChrisB
                      1. 0

                        Rumpaulerei

                        Tom
                        • menschelei
                        1. 0
                          ChrisB
                          1. 0

                            Gültigkeit von Funktionen für den Dateiupload

                            Tom
                            • php
                            1. 0
                              Auge
                              1. 0
                                Tom
                                1. 0
                                  ChrisB
                                  1. 0
                                    Tom
                                    1. 0
                                      ChrisB
                                      1. 0
                                        Tom
                                        1. 0
                                          ChrisB
                                          1. 0
                                            Tom
                                            1. 0
                                              ChrisB
                                              1. 0
                                                Tom
                                                1. 0
                                                  Matti Mäkitalo
                                                  1. 0
                                                    Kai345
                                                    1. 0
                                                      Christian Kruse
                                                  2. 0
                                                    Tom
                                                    1. 0
                                                      Multi
                                    2. 0
                                      Multi
                                      1. 0
                                        Tom
                            2. 0
                              ChrisB
                              1. 0
                                Tom
                            3. 1
                              ChrisB
                              1. 0
                                Tom
                                1. 0
                                  ChrisB
                                  1. 0
                                    Tom
                                    1. 0
                                      ChrisB
                                      1. 0
                                        Tom
                                        1. 0
                                          ChrisB
                    2. 0
                      Christian Kruse
                      1. 0
                        Tom
                        1. 0
                          Christian Kruse
                          1. 0
                            Tom
                2. 1
                  dedlfix
                  • php
                3. 4
                  Matti Mäkitalo
                  1. 0

                    Der Wert von alten PHP-Funktionen

                    Tom
                    • php
            2. 0

              Das geht auch anständiger!

              Der Martin
              • zu diesem forum
              1. 0
                Tom
                1. 1
                  ChrisB
              2. 0
                Gunnar Bittersmann
    2. 0
      Sven Rautenberg
      1. 0
        Tom
        1. 0
          ChrisB
        2. 7
          Sven Rautenberg
          1. 1
            Matti Mäkitalo
            1. 0
              dedlfix
            2. 0
              Tom
              1. 0
                Sven Rautenberg
                1. 0
                  Christian Kruse
                  1. 0
                    Sven Rautenberg
                    1. 0
                      Tom
                  2. 0
                    Tom
          2. 0
            Tom
            1. 0
              ChrisB
              1. 0
                Tom
                1. 0
                  ChrisB
                2. 2
                  Multi
                  1. 0
                    Tom
                    1. 2
                      Multi
                3. 0
                  Der Martin
                  1. 0
                    Tom
                    1. 0
                      ChrisB
            2. 3
              Sven Rautenberg
            3. 3
              dedlfix
              1. 2
                Multi
                1. 0
                  Tom
                  1. 0
                    Matti Mäkitalo
                    1. 0
                      Tom
                      1. 0
                        ChrisB
                        1. -1
                          Christian Kruse
                          1. 0
                            Sven Rautenberg
                            1. 0
                              Christian Kruse
                          2. 0
                            dedlfix
                            1. 0
                              Sven Rautenberg
                              1. 0
                                dedlfix
                                1. 0
                                  Christian Kruse
                                  1. 0
                                    dedlfix
                                    1. 0
                                      Sven Rautenberg
                                      1. 0
                                        dedlfix
                                      2. 2
                                        Christian Kruse
                                        1. 0
                                          Sven Rautenberg
                                        2. 0
                                          Tom
                                          1. 0
                                            Sven Rautenberg
                                            1. 0
                                              Tom
                                              1. 0
                                                dedlfix
                                                1. 0
                                                  Tom
                                                  1. 1
                                                    Sven Rautenberg
                                                    1. 0
                                                      Tom
                                                      1. 0
                                                        ChrisB
                                                      2. 3
                                                        Sven Rautenberg
                                                  2. 0
                                                    dedlfix
                                                    1. 0
                                                      Tom
                                                      1. 2
                                                        ChrisB
                                                      2. 3
                                                        Sven Rautenberg
                                                        1. 0
                                                          Tom
                                                          1. 0
                                                            Matti Mäkitalo
                                                            1. 0
                                                              Tom
                                                          2. 0
                                                            Sven Rautenberg
                      2. 2
                        Multi
                      3. 3
                        Christopher
    3. 0

      Alle OOP-Konzepte, die ich bisher kennengelernt habe...

      Mitleser
      • meinung
    4. 0
      Multi
      1. 0
        Tom
        1. 0

          Sicherheit beim Upload, Ergänzung zu open_basedir

          Tom
        2. 1
          ChrisB
        3. 0
          Multi
          1. 0
            dedlfix
            1. 0
              Tom
              1. 0
                dedlfix
                1. 0
                  Tom
                  1. 0
                    dedlfix
                    1. 0
                      Tom
                      1. 0
                        dedlfix
                        1. 0
                          Tom
                          1. 0
                            dedlfix
                            1. 0
                              dedlfix
                              1. 0
                                Tom
                          2. 0
                            Mitleser
        4. 1
          Multi
  2. 1
    dedlfix
    1. 0
      molily
  3. 0
    Multi