Ataki typu SQL injection polegają na wstawieniu lub „wstrzyknięciu” zapytania SQL za pośrednictwem danych wejściowych przesyłanych przez klienta do aplikacji. Pomyślnie przeprowadzony atak tego typu może posłużyć do odczytu wrażliwych informacji z bazy danych oraz ich modyfikacji, czy też usunięcia. W najbardziej skrajnych przypadkach umożliwia on wydawanie poleceń systemowych.
Poniżej został zaprezentowany niebezpieczny fragment kodu umożliwiający przeprowadzenie ataku typu SQL injection:
SELECT * FROM users WHERE name = userName;
Zmienna „userName” pobierana jest od użytkownika. Jeżeli atakujący poda jako nazwę użytkownika wyrażenie: ‘OR’ 1 ‘=’1’ spowoduje to wymuszenie wyboru prawidłowej nazwy użytkownika, ponieważ wyrażenie „1” = „1” jest zawsze prawdziwe.
Do testowania podatności typu sql injection można wykorzystać narzędzie zwane sqlmap, które w sposób automatyczny jest w stanie znaleźć i wykorzystać możliwość wstrzykiwania zapytań SQL. Obsługuje ono sześć technik sql injection: opartych na logice, niewidomych, błędach, zapytaniach typu UNION, kwerendach skumulowanych i atakach typu OOB. Pozwala na atakowanie baz danych MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, HSQLDB i Informix .
Na rysunku poniżej zaprezentowany został przykład użycia aplikacji sqlmap, która to za pomocą testów heurystycznych wykryła, że w testowanym zapytaniu, parametr id może być podatny na atak typu sql injection.