Was verbirgt sich hinter SQL-Injections?

08.03.2007

Im Zusammenhang von PHP und Datenbankentwicklung wird immer wieder von sogenannten SQL-Injections gesprochen mit denen man Zugriffe auf die Datenbank manipulieren kann.

Betrachten wir zur Erläuterung folgende SQL Abfrage:

Code:
SELECT username FROM table_users WHERE username = '$_POST ['username']' AND password = '$_POST ['password']'


Trägt der Benutzer nun beispielsweise
Zitat:
N43';--
für den Benutzernamen und
Zitat:
egal
als Passwort ein wird aus der Abfrage folgendes:
Code:
SELECT username FROM table_users WHERE username = 'N43';--' AND password = 'egal'

Das Semikolon vor den beiden -- beendet den SQL Befehl und die beiden -- signalisieren SQL, dass alles weitere als Kommentar zu interpretieren ist. Das passwort= 'egal' wird also einfach ignoriert.

Jetzt hat der Benutzer Zugriff auf den geschützten Bereich. Um dies zu verhindern sollte man vorher mysql_real_escape_string oder addslashes verwenden, denn dann wird aus der Eingabe folgendes:
Code:
SELECT username FROM table_users WHERE username = 'N43\';--' AND password = 'egal'
Dadurch, dass das vom Benutzer eingegebene ' escaped wird wird es von SQL nicht als String-Ende interpretiert, sondern als Teil des Strings. Nun ist der Benutzername und das Passwort falsch, weshalb die Abfrage kein Ergebniss mehr liefert. Der Loginversuch schlägt wie gewollt fehl.

Deine Meinung ist gefragt:


Es wurden noch keine Kommentare geposted.

Sei der Erste und teile uns Deine Meinung mit.

Einen neuen Kommentar erstellen...