dedlfix: Sicherheit beim Upload

Beitrag lesen

Hi!

Ich lade ein Bild hoch, bevor ich es abspeichere überprüfe ich ob es sich um ein jpg handelt.

Die Prüfungen mit der Fileinfo-Extension und getimagesize() können nur einige herausragende Merkmale des jeweiligen Formats prüfen. Sie können nicht leisten, dir zu versichern, dass ansonsten auch alles in Ordnung mit der Datei ist. Keine der beiden Methoden liest meines Wissens eine Datei vollständig und prüft auf Plausibilität des Inhalts oder auf schädlichen Inhalt. (Da arbeiten Virenscanner deutlich gründlicher.) Fileinfo ist auf die Erkennung vieler Formate ausgelegt und prüft manchmal nur den Dateianfang auf eine bestimmte signifikante Bytefolge. getimagesize() macht sicher so etwas ähnliches, um das Grafikformat zu ermitteln. Für die Größeninformation muss die Funktion nur auf einen bestimmten Datenblock zugreifen. Der Inhalt der restlichen Blöcke ist ihr egal. Dort drin könnte unter Umständen auch PHP-Code versteckt sein.

Muss ich sonst noch etwas beachten um WIRKLICH nur JPGs zu bekommen?

Jedenfalls kannst du nicht mit einfachen Mitteln ausschließen, dass eine auf den ersten Blick richtige JPEG-Datei nicht noch irgendwelchen unerwünschten Inhalt hat. Weitere Manipulationen, wenn die Datei erstmal auf dem Server liegt, sind auch nicht mit absoluter Gewissheit ausschließbar. Du kannst aber wenigstens noch ein paar Maßnahmen ergreifen, die es schwieriger machen, einen schädlichen Inhalt zur Wirkung kommen zu lassen. Die Datei sollte wenn möglich nicht in einem Verzeichnis abgelegt werden, in dem der Webserver ausführbaren Inhalt erkennt. Im einfachen Fall sorgt man dafür, dass keine Dateiendung geschrieben werden kann, die den Apachen zum Anwerfen von PHP veranlasst. Das Ausschalten des PHP-Handlers für alle Dateien des Verzeichnisses wäre eine weitere Möglichkeit. Außerhalb des DocumentRoot ablegen geht nur, wenn die Datei nicht direkt ausgeliefert werden soll. Zumindest ist das temporär keine schlechte Idee, wenn du alle hochgeladenen Dateien erstmal einem Virentest oder anderen geeigneten Prüfungen unterziehst, bevor die Allgemeinheit darauf zugreifen darf.

Vielleicht ist das alles nicht wichtig für dein Vorhaben, aber wenn du "Sicherheit" im Topic erwähnst und nicht genau spezifizierst, was das in deinem Fall bedeutet, dann kann man sich auch recht schnell in irrelevanten Details verlieren.

if((isset($_POST['submit']))&&(!empty($_FILES['bild']['tmp_name'])))

$_POST['submit'] muss nicht unbedingt existieren. Formulare können auch mit Enter statt Mausklick auf dem Submit-Button abgesendet werden. Die HTML(4.01)-Spezifikation schreibt nicht vor, dass in dem Fall irgendein unbeteiligter Submit-Button sein name-value-Pärchen mit in den Versand geben muss. Und somit tun das auch nicht alle Browser.

Es reicht an dieser Stelle, wenn du prüfst, dass $_FILES['bild']['error'] existiert und den Wert UPLOAD_ERR_OK hat.

$picture_info = getimagesize ($_FILES['bild']['tmp_name']);
if ($picture_info[2]==2) // nur JPG

Hier würde ich die IMAGETYPE_XXX-Konstanten (oder in deinem Fall die für JPEG) empfehlen. Der Zahlenwert wird sich sicherlich nicht ändern, aber aus dem Namen der Konstante geht bereits hervor, dass JPEG gemeint ist, so dass der Kommentar obsolet ist.

  echo 'Dies ist kein zulässiges Bildformat!';  

Nicht nur diese Information ist interessant für den Anwender, sondern auch, was er im Fall eines Fehlers besser machen kann, also welches die zulässigen Formate sind.

Lo!

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