SQL-injection

Aus TBZ_-_Wiki
Wechseln zu:Navigation, Suche

SQL-Injection ist eine Technik, die den Syntax eines SQL-Queries unterbricht und gezielt SQL Befehle in eine Webapplikation einschleust.

Vorgehen

Um SQL einzuschleusen muss ein interface vorhanden sein (Formular, URL, Cookie etc.). Ein einfacher Test um zu prüfen ob SQL-injection abgefangen wird ist ein ' als Übergabe mitzugeben. Dies unterbricht in der Regel den Syntax der vorhandenen Query.

Beispiel

Wir nehmen an, dass folgende SQL Abfrage für eine Suche in einer Applikation zuständig ist:

SELECT * FROM items WHERE Name = 'Suchanfrage';

Der Text "Suchanfrage" wurde über ein Suchfeld in einem Formular eingegeben. Ein Benutzer könnte deshalb auch den Text folgendermassen gestalten: "Suchanfrage' OR '1' = '1", und somit den Syntax unterbrechen:

SELECT * FROM items WHERE Name = 'Suchanfrage' OR '1' = '1';

Die oben stehende Abfrage würde alle Datensätze in der Tabelle items ausgeben.


Gegenmassnahmen

Escapen

In vielen Tutorials wird in zusammenhang mit PHP der Befehl mysql_real_escape() erwähnt um SQL Steuerzeichen zu escapen.

Die mysql_ Library ist jedoch veraltet und man sollte bei einem neuen Projekt darauf verzichten. Besser wäre etwas wie PDO oder Mysqli zu verwenden.

Ein Beispiel wie man ein String korrekt escapen würde:

$EscapedString = mysqli_real_escape_string($UnfilteredText);

Prepared Statements

Richtig angewendet tritt SQL-injection bei Prepared Statements nicht auf.