MySQL Abfragen schützen, Manipulation unterbinden

Marius Heil

Erfahrenes Mitglied
Hi,

mir ist grad voller schrecken eingefallen, dass eine MySQL Abfrage wie:
PHP:
'UPDATE benutzer SET name="'.$_GET['name'].'" icq='.$_GET['icq'].' WHERE ID=78'
ohne größere Probleme manipuliert werden wenn man die GET Variable für die ICQ Nummer manipuliert und die Anfrage somit erweitert. Man kann dann einfach seine Punkte aufpolieren.
Muss ich nun alle GET oder POST Variablen vorher kontrollieren? Bei Werten die in "" gesetzt sind, dürfte es nciht weiter schlimm sein, da beim hinzufügen eines " über die GET-Variable sofort ein Escapezeichen davorgesetzt wird.
Wie kontrolliere ich Integer Werte am einfachsten? Einfach vorher in nen Integer Wert konvertieren?


Marius
 
Einer Seits würde ich grundsätzlich die Funktion mysql_real_escape_string einbinden.
http://de3.php.net/manual/de/function.mysql-real-escape-string.php

Ansonsten für Anwenderdaten über Session eine Kontrolle vorablaufen lassen, ob die Person überhaupt die Rechte für die Funktion (update, insert, delete) besitzt.

Ansonsten Kontrolle von Werten via Funktionen wie is_int, oder regulärenAusdrücken.
Sehr nett ist auch nen Validator vorher laufen lassen.
Nen gutes Beispiel für OOP Validator leicht erweiterbar findest du hier:
http://www.phpblogger.net/2007/07/09/formularinhalte-mit-php-validieren/
 
Wenn du es in Kauf nehmen kannst, deine Scripte um zu bauen, kann ich dir auch Prepared Statements empfehlen. Bei PHP5 ist das mittels PDO möglich, bei PHP4, könnte man mit PEAR::MDB2 arbeiten.
 
Hi,

danke für die Posts, das passt mir glaub ich sehr gut in den Kram, welche Zeichen sind denn generell gefährlich?
Ich würde behaupten =,"
Wenn die Zeichen mit nem Escapezeichen übermittelt werden, sollte nichts mehr passieren können, oder?
Das passt mir insofern gut, als dass ich bereits globale MySQL Funktionen geschrieben habe, das sind 3 oder 4, über die läuft alles, dann würd ich die entsprechend modifizieren, dann sollte nix mehr groß schiefgehen, was mein ihr?
@saftmeister: Von prepared statements hab ich bisher noch nix gehört, ich informier mich aber grad mal ein wenig in Google drüber.


Marius
 
Zurück