Logo David Burdelak
Słownik · Cyberbezpieczeństwo

Co to jest SQL Injection?

Ostatnia aktualizacja:

SQL Injection (SQLi) to atak, w którym napastnik wstawia własne polecenia SQL do pola formularza, parametru adresu, ciasteczka lub nagłówka, a aplikacja wykonuje je w bazie danych. Pozwala to odczytać, zmienić lub usunąć dane, ominąć logowanie, a w skrajnych przypadkach przejąć serwer. Należy do kategorii ataków typu injection, od lat obecnej w zestawieniu OWASP Top 10.

Jak działa SQL Injection?

Luka powstaje, gdy aplikacja dokleja dane od użytkownika do treści zapytania jako zwykły tekst. Baza nie odróżnia wtedy danych od poleceń. Klasyczny przykład to formularz logowania, w którym zamiast loginu wpisuje się ciąg ' OR '1'='1. Zapytanie sprawdzające użytkownika zmienia sens i zwraca rekord niezależnie od hasła.

Z tego mechanizmu wziął się znany żart z komiksu xkcd o matce, która nazwała syna Robert'); DROP TABLE Students;--, przez co szkolny system usunął tabelę uczniów.

Rodzaje SQL Injection

Rodzaj Na czym polega
In-band, oparty na błędach atakujący odczytuje dane z komunikatów błędów bazy wyświetlanych na stronie
In-band, UNION doklejenie UNION SELECT dołącza do wyników strony dane z innych tabel
Ślepy, logiczny strona nie pokazuje danych, ale reaguje inaczej na prawdę i fałsz, co pozwala odczytywać dane znak po znaku
Ślepy, czasowy atakujący wnioskuje o danych z opóźnienia odpowiedzi, np. funkcji SLEEP()
Drugiego rzędu złośliwe dane są najpierw bezpiecznie zapisane, a wykonują się dopiero w innym zapytaniu
Out-of-band baza wysyła dane do serwera atakującego, np. przez zapytanie DNS

Znane ataki SQL Injection

W 2008 roku przez SQL Injection włamano się do Heartland Payment Systems, operatora płatności, skąd wykradziono dane ponad 100 milionów kart. W 2015 roku brytyjski operator TalkTalk stracił dane około 157 tysięcy klientów, a w 2023 roku podatność SQL Injection w oprogramowaniu MOVEit Transfer posłużyła grupie Cl0p do kradzieży danych z tysięcy organizacji na całym świecie.

Do automatycznego wyszukiwania tej podatności służą narzędzia takie jak sqlmap, używane przez pentesterów, ale też przez atakujących.

Jak zapobiega się SQL Injection?

Podstawową ochroną są zapytania parametryzowane (prepared statements), w których polecenie SQL i dane trafiają do bazy osobno, więc dane nigdy nie są interpretowane jako kod. Uzupełniają je minimalne uprawnienia konta bazy, walidacja danych, ukrywanie błędów SQL przed użytkownikami i zapora aplikacyjna. Przykłady kodu w PHP i Node.js, ORM-y oraz testowanie podatności opisuje poradnik o ochronie przed atakami SQL Injection.

Zobacz w praktyce

Powiązane pojęcia

Wszystkie hasła z kategorii Cyberbezpieczeństwo