13.07.2015 Aufrufe

Verteidigung gegen SQL-Injection-Angriffe - ETH Zürich

Verteidigung gegen SQL-Injection-Angriffe - ETH Zürich

Verteidigung gegen SQL-Injection-Angriffe - ETH Zürich

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Kapitel 5Ausführen beliebiger <strong>SQL</strong>-Statements5.1 EinleitungBei gewissen <strong>SQL</strong>-Statements kann beliebiger <strong>SQL</strong>-Code eingefügt werden. Am einfachsten geht dies, wenn eineApplikation am Ende eines <strong>SQL</strong>-Strings einen nummerischen Parameter einfügt. Es ist aber auch möglich, wennder Parameter eine Zeichenkette ist und der eingefügte Wert im <strong>SQL</strong>-Statement von Anführungszeichen eingeschlossenist. In diesem Fall und im Fall eines nummerischen Parameters, der nicht am Ende des <strong>SQL</strong>-Statementseingefügt wird, muss das <strong>SQL</strong>-Statement jedoch einzeilig sein, oder der Parameter, womit der Angreifer Codeeinfügen will, muss in der letzten Zeile des mehrzeiligen <strong>SQL</strong>-Statements vorkommen. Dann nämlich kann derrestliche Teil des <strong>SQL</strong>-Statements mit Hilfe von Kommentarzeichen abgeschnitten werden. Nachfolgend ist zubeiden Fällen (nummerischer Parameter und Zeichenkette) je eine Beispiel-Abfrage aufgeführt:SELECT * FROM messages WHERE messageid = ${messageid}SELECT * FROM usersWHERE username = ’${username}’Hierbei seien ${messageid} und ${username} die Parameter, die eingefügt werden.Im ersten Beispiel erfolgt der Angriff relativ einfach:${messageid}0; Dies führt zu folgendem <strong>SQL</strong>-Statement:SELECT * FROM messages WHERE messageid = 0; Für das zweite Beispiel müssen Kommentarzeichen verwendet werden. In <strong>SQL</strong> wird dazu die Zeichenkette --verwendet. Aller Text danach (auf derselben Zeile) wird ignoriert. Der Angriff erfolgt folgendermassen:${username}’; --Dies führt zu folgendem <strong>SQL</strong>-Statement:SELECT * FROM usersWHERE username = ’’; --’23

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!