Wie für die ungleiche Notierung; SQL-Injection tritt auf, wenn der Codierer nicht Benutzereingabe für gefährliche Zeichen wie einfache Anführungszeichen sanieren - betrachten folgende Anweisung
SELECT * FROM admin WHERE username='$_GET["user"]' and password='$_GET["pass"]'
, wenn ich weiß, dass gültige Benutzer ‚admin‘ und legen Sie die 'or 1=1
ich folgendes erhalten wird
SELECT * FROM admin WHERE username='admin' and password='something' or 1=1
Diese die Abfrage alle Tage wahr bei der Rückkehr zur Folge haben wird, weil die linke Seite des Ausdrucks immer wahr sein wird, unabhängig vom Wert des Passworts.
Dies ist das einfachste Beispiel für SQL-Injection und ofter Sie werden feststellen, dass der Angreifer mit Kommentaren nicht den Rest der Abfrage heraus verwenden müssen, um das Angebot an alle, oder vielleicht Kommentar Trennzeichen wie --
oder /*
, wenn nach dem Injektionspunkt mehr Parameter übergeben werden. Die HEX-Codierung kann verschiedene Ursachen haben, die Filterung zu vermeiden. Es ist einfacher, hexadezimale Werte zu verwenden, weil Sie sich nicht darum kümmern müssen, alle Ihre Werte in einer Abfrage zu zitieren. Dies ist zum Beispiel nützlich, wenn Sie concat
zusammen notate zwei Felder zusammen, wie so verwenden möchten:
inject.php?id=1 and 1=0 union select 1,2,concat(username,0x3a3a,password) from admin
Welche 3. Reihe bieten würde, ist sichtbar eine Rückkehr für isntance admin::admin
. Wenn ich nicht Hex-Codierung verwenden würde, würde ich dies tun:
inject.php?id=1 and 1=0 union select 1,2,concat(username,'::',password) from admin
Dieses Problem könnte mit vorgenannten addslashes
Funktion, sondern auch mit schlecht regex sanitization Funktionen geschrieben oder wenn Sie sehr komplizierte Frage haben.
SQL-Injektion ist ein sehr breites Thema, und was ich behandelt habe, ist kaum eine Einführung durch.
Gute Frage. Es ist traurig zu sehen, dass ich der einzige bin, der gepostet hat, dass diese Technik tatsächlich in einem Sql-Injection-Exploit verwendet wurde. – rook