Sven Rautenberg: Aufnahme von vertrauensunwürdigen Parametern in die MySQL-Query

Beitrag lesen

Moin!

Wie weit ist es, trotz der Klammerung mit Stringbegrenzern im Statement '...', möglich, dass der in das Statement eingefügte String einen Stringbegrenzer und danach MySQL-Befehle enthalten kann? Generell kann externen Parametern nur nach Prüfung getraut werden, daher mein deduktiver Schluss:

SELECT benutzername, kw FROM benutzer
WHERE benutzername='xyz' DROP benutzer
                    ^^^^^^^^^^^^^^^^^^
                   $_REQUEST['whatever']

Ja, du hast natürlich Recht! Das Problem, dass möglicherweise böse Daten in den Query eingeschleppt werden, besteht. Das ist aber ein grundsätzliches Problem, keines, was nur bei der Authentifizierung auftritt.

Mit den möglichen und zulässigen MySQL-Queries bin ich wenig vertraut, aber seitdem ich hier einige Threads über exakt dieses Problem gelesen habe, bin ich bei meinen Projekten komplett auf mysql_escape_string() http://www.php.net/manual/de/function.mysql-escape-string.php umgestiegen, da dort vorher jedwede Parameter direkt in den Query-String eingefügt wurden. Das hieß, dass man, soweit möglich, jede erdenklichen MySQL-Befehle »einschmuggeln« hätte können und damit im schlimmsten Falle die Datenbank hätte löschen können, sofern dessen Name bekannt ist, so mutmaße ich in meinem Unwissen - deshalb habe ich mir systematisch diese Paranoia angewöhnt.

Nur weil man paranoid ist, bedeutet das noch lange nicht, dass sie einen nicht verfolgen.

Hältst du diese Methode für eine unnötige oder unzureichende Maßnahme oder hast du vergessen, darauf einzugehen...?

Ich habe diesen Aspekt fahrlässig vernachlässigt. Denn das Thema ist leider dann doch ziemlich komplex:

PHP arbeitet gewöhnlich mit magic_quotes_gpc = on, escaped also alle Anführungszeichen " und ' durch einen Backslash. Diesen Backslash muß man, bevor man mysql_escape_string() ansetzt, aber wieder loswerden - aber natürlich nur, wenn magic_quotes_gpc wirklich eingeschaltet ist.

Mit anderen Worten: Man hat höllisch viel zu tun, um einen String datenbankgerecht aufzubereitet. Sinnvollerweise erledigt man das natürlich in einer dafür vorgesehenen Funktion.

Ich habe diesen Aufwand aus der Betrachtung weggelassen, weil er mehr verwirrt als geholfen hätte. Außerdem kann man in PHP durch mysql_query() nur _einen_ MySQL-Query absenden. "SELECT irgendwas; DROP tabelle" kommt also nicht durch. Aber man könnte die Authentifizierung angreifen, indem man "OR 1=1" oder ähnlich geeignet passende Bedingungen zum WHERE hinzufügt, um eine erfolgreiche Authentifizierung vorzutäuschen.

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
0 44

Wahnsinn... PHP abfrage nach einen kennwort

MichaelS
  • php
  1. 0
    Carl
  2. 0
    fastix
  3. 0
    Lemmy Danger
  4. 0
    Tobias K.
    1. 0
      MichaelS
      1. 0
        Tobias K.
        1. 0
          MichaelS
          1. 0
            Sorgenkind Mech
            1. 0
              Lemmy Danger
              1. 0
                Sorgenkind Mech
                1. 0
                  MichaelS HILFE !!!!
                  1. 0
                    Lemmy Danger
                  2. 0
                    Sorgenkind Mech
                    1. 0
                      MichaelS
                      1. 0
                        Sorgenkind Mech
                        1. 0
                          MichelS...
                    2. 0
                      DAS IST RICHTIG MichaelS... hatte fehler dinnen
                      1. 0
                        Sorgenkind Mech
                        1. 0
                          MichaelS
                          1. 0
                            Sorgenkind Mech
                            1. 0
                              Michaels
                              1. 0
                                Sorgenkind Mech
                          2. 0
                            Tobias K.
                            1. 0
                              MichaelS
                              1. 0
                                Tobias K.
                          3. 0
                            Lemmy Danger
                            1. 0
                              MichaelS
                              1. 0
                                Tobias K.
                                1. 0
                                  MichaelS
                                  1. 0

                                    Gott sei dank...

                                    Lemmy Danger
                                    1. 0
                                      Tobias K.
                              2. 0
                                Lemmy Danger
                                1. 0
                                  Tobias K.
                  3. 0
                    Tobias K.
                2. 0
                  Lemmy Danger
                  1. 0
                    Sorgenkind Mech
                3. 0
                  Christian Seiler
      2. 0
        Sven Rautenberg
        1. 0
          AnalphaBestie
          1. 0

            Was soll ich werden? ;)

            Sven Rautenberg
            • menschelei
        2. 0

          Aufnahme von vertrauensunwürdigen Parametern in die MySQL-Query

          molily
          • datenbank
          1. 0
            Sven Rautenberg
  5. 0
    Matze