Na czym polega SQL Injection
Jeśli aplikacja buduje zapytania SQL na podstawie danych wejściowych użytkownika bez odpowiedniej walidacji i parametryzacji, atakujący może dopisać własny fragment kodu SQL. W efekcie system wykona zapytanie inne niż zamierzone przez twórcę aplikacji.
Skutki
- odczyt poufnych danych z bazy,
- modyfikacja lub usunięcie rekordów,
- eskalacja uprawnień,
- w niektórych konfiguracjach - wykonanie poleceń na serwerze.
Jak się bronić
- używać zapytań parametryzowanych (prepared statements),
- walidować dane wejściowe,
- ograniczać uprawnienia konta bazy danych,
- unikać bezpośredniego sklejania zapytań SQL ze stringów użytkownika.
Kiedy ryzyko nie występuje
Jeśli produkcyjna ścieżka odczytu nie korzysta z relacyjnej bazy danych, klasa ryzyk SQL Injection w tej warstwie po prostu nie istnieje. To jedna z różnic między systemami opartymi o SQL runtime a architekturą Flat-File CMS.