SQL-Injections#
- WICHTIGER HINWEIS:
Diese Befehle niemals für ein fremdes System anwenden, weil strafrechtlich relevant!
Schutzmaßnahmen:
Prüfen, welche Software ich einsetze!
Beispiel Sicherheitslücken in Zimbra
Alternativen prüfen und/oder Sicherheitswarnungen verfolgen und schnell reagieren!
Eingaben prüfen!
Wordpress – Eingabeprüfung im Plugin
Maßnahmen wie
Pingback, Talkback und RPC nicht nutzen
REST-API mit JSON
Zugang zum Backend nicht über offensichtliche URLs!
streng typisierte Abfragen
sichere API verwenden
keine internen ID’s der Datenbanken im Webinterface verwenden, besser einen Index, indirekte Referenzen oder andere indirekte Methoden verwenden
Fehlermeldungen geben oft zu viele Informationen über das System preis (prüfen Sie Fehlerseiten nach Fehleingaben)!
keine eigenen kryptischen Verfahren anwenden, sondern allgemein anerkannte wie AES, RSA, SHA-256 oder besser…
Die am häufigsten ausgenutzten Schwachstellen sind laut http://cwe.mitre.org/top25/index.html
SELECT userid
FROM users
WHERE user = 'foo' AND password = 'password' OR '1' = '1';
SELECT *
FROM items
WHERE user = 'koppatz' AND itemname = 'wichtig' OR 'a'='a';
Mit dem angehängten OR wird jede Aussage wahr und deshalb ausgeführt. Sie verkürzt sich dann zu:
SELECT *
FROM items;
Prüfen der ID#
Hier wird die ID in der Abfrage verwendet.
Wo ist die Prüfung, ob die ID zu einem konkreten Kunden gehört?
Hier könnte jede ID eingefügt werden, dann auch solche, die nicht zu einem Konkreten Kunden gehören.
SELECT * FROM
invoices WHERE id = parameter1
Besser:
SELECT * FROM
rechnung WHERE id = parameter1
AND kunde = parameter2
Andere Quellen#
Folien: