SQL-Injections¶
WICHTIGER HINWEIS: | |
---|---|
Diese Befehle niemals auf 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!
- Maßnahmen wie
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
Fehlermeldungen im Web gefunden¶
{"success":false,"error":"SQLSTATE[42S22]:
Column not found: 1054 Unknown column
'shop_product_categories.shop_category_id' in 'order clause'"
}
- Es ist also eine MySQL-DB