Występuje, gdy aplikacja buduje wyrażenia bazodanowe, łącząc tekst polecenia z wartościami wpływanymi przez atakującego bez zachowania niezawodnej granicy między kodem a danymi. Udany atak może odczytać lub zmienić dane, ominąć kontrole aplikacji lub wywołać możliwości bazy danych dostępne kontu aplikacji.
Podstawową obroną jest utrzymanie stałej struktury zapytania i przekazywanie wartości przez interfejsy sparametryzowane. Walidacja wejścia może wymuszać oczekiwania biznesowe, ale nie zastępuje parametryzacji; uprawnienia bazy danych powinny też ograniczać konsekwencje, gdy inna kontrola zawiedzie.
Najważniejsze punkty
Bezpieczna konstrukcja zapytańUżywaj przygotowanych wyrażeń lub poprawnie sparametryzowanych interfejsów bazodanowych w każdej ścieżce dostępu do danych, w tym zadań w tle, funkcji administracyjnych, importowanych danych i wejść pośrednich.
Dynamiczne elementy zapytańParametry często nie mogą reprezentować nazw tabel, kolumn ani kierunków sortowania. Mapuj takie wybory na stałą listę dozwolonych lub przeprojektuj zapytanie zamiast wstawiać niezaufany tekst.
Redukcja konsekwencjiNadawaj tożsamościom aplikacji tylko niezbędne uprawnienia bazodanowe, oddzielaj role tam, gdzie praktyczne, chroń poświadczenia połączeń, unikaj niepotrzebnych możliwości bazy i monitoruj nietypowe zachowanie zapytań.
Istotne ograniczenieEscaping, procedury składowane, mapowanie obiektowo-relacyjne, walidacja wejścia ani zapora aplikacji webowych nie zapobiegają automatycznie wstrzyknięciom SQL; bezpieczeństwo zależy od tego, jak każde zapytanie jest ostatecznie zbudowane i wykonane.