moep: (PHP) (SICHERHEIT) (HTML) - Datenbankabfragen sichern

Hallo,
ich habe mir gerade überlegt, dass wenn ich ein Formular mache wo ein User seinen Username eingibt der da ja theoretisch MySQL-Datenbankabfragen durchführen kann!?

Also das ganze sieht so aus:

<?php
---cut---

mysql_query("SELECT * FROM user WHERE username = '$_POST[username]';");

---cut---
?>

Wenn der User "bla" als Usernamen nun aber folgendes eingibt:

"bla'; DROP TABLE user; SELECT pass FROM user WHERE username = 'andereruser"

Dann sieht mein Query ja so aus:

"SELECT * FROM user WHERE username = 'bla'; DROP TABLE user; SELECT pass FROM user WHERE username = 'andereruser';"

Das bedeutet jeder User kann meine Datenbank komplett löschen und beliebige Abfragen und Löschungen durchführen.

Wie kann man sich vor sowas schützen?

Wäre nett wenn mir jemand elfen könnte ;-)

GreeZ, moep.

  1. Hallo,

    Hi,

    indem du nicht alle Zeichen, die ein Benutzer eingibt, ungeprüft und/oder ungewandelt übernimmst.

    Gruß
    Aliaksandr

  2. Moin!

    Das hilft dir sicherlich:
    http://php.net/mysql-escape-string

    rgds, Till

    1. Das hilft dir sicherlich:
      http://php.net/mysql-escape-string

      danke, moep.

  3. Hallo moep!

    ich habe mir gerade überlegt, dass wenn ich ein Formular mache wo ein User seinen Username eingibt der da ja theoretisch MySQL-Datenbankabfragen durchführen kann!?

    Wie kann man sich vor sowas schützen?

    Unabhängig von SQL-Abfragen ist ganz allgemein dclp FAQ: 12.11. Prüfe importierte Parameter. Traue niemandem vielleicht noch interessant für Dich.
    Dein konkretes Problem ist sozusagen ein spezielles Unterproblem davon.

    MfG
    Götz

    --
    Losung für Sonntag, 28. November 2004
    Die Israeliten sprachen zum Herrn: Wir haben gesündigt, mache du es mit uns, wie dir's gefällt; nur errette uns heute! (Richter 10,15)
    Der Engel sprach zu Maria: Siehe, du wirst schwanger werden und einen Sohn gebären, und du sollst ihm den Namen Jesus geben. Der wird groß sein und Sohn des Höchsten genannt werden; und Gott der Herr wird ihm den Thron seines Vaters David geben. (Lukas 1,30-32)
    (Losungslink)