MySQL Sicherheit

Hi,

Wenn ich aus einer Datenbank einen bestimmten Datensatz auslesen will, befindet sich im Query-String zum Beispiel "id=12". Wenn aber jetzt jemand den Query-String verändert und da "bösen" Code reinschreibt, wäre es doch möglich, dass er Datensätze löscht, oder sogar die Ganze Datenbank.

Ich suche jetzt nach einer guten Möglichkeit, vor dem Absetzen des Querys die Variable auf solchen Code zu überprüfen.
Was wäre dabei die beste Möglichkeit?

Meine Ideen:
1.
Die Länge des Inhalts der Variable auf "Überlänge" prüfen. Sollte z.B. in der Variable nur ein Name drinstehn, muss die Länge keine 100 Zeichen sein.

2.
Nach MySQL-Schlüsselwörtern suchen. z.B. DROP, DELETE, INSERT, UPDATE, REPLACE usw.

3.
Wenn es sich bei der Varaible um eine ID handelt, prüfen ob es eine Zahl ist.


Was haltet Ihr von diesen Ideen? Oder habt ihr bessere Vorschläge?


Gruß
 
Hier noch ein paar tips:

das mit jeder übermittelten variablen machen, die ein user verändern kann:

hier zB mit name

1. $_POST['name'] = trim($_POST['name']); //Leerzeichen usw. entfernen

2. $_POST['name'] = strip_tags($_POST['name']); //sämtlichen HTML-code rausnehmen

3. $_POST['name'] = htmlentities($_POST['name']); //wandelt alle geeigneten Zeichen in entsprechende HTML-Codes um, zB Leerzeichen in $nbsp; usw.



mfg mosquitofez
 
Wenn es nur eine ID ist, reicht es wenn du intval($_GET['id']) machst. Damit ist die Eingabe auf jedenfall ein int und es kann kein String eingegeben werden.
 
Notfalls tut es auch
PHP:
is_numeric($_GET['id']);

Gibt dir zurueck, ob der Wert eine Ziffer/Zahl ist (true) oder nicht (false).
(Geht zwar in deinem beispiel auch einfacher, da du hier eine if-Abfrage basteln muesstest, aber vielleicht brauchste es ja irgendwann mal..)
 
Für Werte für eine MySQL-Datenbankabfrage reicht die mysql_real_escape_string()-Funktion, ist der erwartete Datentyp genauer einschränkbar, sind entsprechende Validierung und Filterung möglich und ratsam. Eklatante Abweichungen sollten am besten sogar protokolliert werden.
 
@Gumbo und Gunah

Liest ihr euch eigentlich die anderen Beiträge durch?
Oder war ich nicht fachlich genug, dann wäre das ok:-)

Danke und bis bald.
g3radiochris
 
Zurück