SQL-Injections

WICHTIGER HINWEIS:
 Diese Befehle niemals auf ein fremdes System anwenden, weil strafrechtlich relevant!

Schutzmaßnahmen:

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