Nodea — logo

SQL injection

SQL injection (wstrzyknięcie kodu SQL) to atak polegający na przemyceniu złośliwego fragmentu zapytania SQL przez niezabezpieczone dane wejściowe aplikacji. Jeśli program bez odpowiedniej ochrony wkleja dane od użytkownika wprost do zapytania, atakujący może zmienić jego sens i uzyskać nieautoryzowany dostęp do bazy danych. To jedna z najstarszych i najgroźniejszych podatności wymienianych na liście OWASP Top 10.

Na czym polega SQL injection

Atak jest możliwy, gdy aplikacja buduje zapytanie SQL przez proste sklejanie tekstu z danymi wpisanymi przez użytkownika — na przykład w formularzu logowania, polu wyszukiwania czy parametrze adresu URL. Napastnik zamiast zwykłej wartości wpisuje spreparowany ciąg, który „domyka" oryginalne zapytanie i dopisuje własne polecenia. Dzięki temu może:

  • ominąć uwierzytelnianie i zalogować się bez znajomości hasła,
  • odczytać dane, do których nie ma uprawnień (np. całą tabelę użytkowników),
  • zmodyfikować lub usunąć rekordy,
  • w skrajnych przypadkach wykonać polecenia systemowe na serwerze bazy.

Odmiany ataku obejmują m.in. wstrzyknięcia oparte na komunikatach błędów, na czasie odpowiedzi (blind SQL injection) oraz na łączeniu wyników (UNION-based).

Zastosowanie w praktyce

Ochrona przed SQL injection jest obowiązkowym elementem bezpiecznego programowania. Fundamentem są zapytania parametryzowane (prepared statements), które traktują dane użytkownika wyłącznie jako wartości, nigdy jako kod. Uzupełniają je walidacja danych wejściowych, zasada minimalnych uprawnień konta bazy danych oraz warstwowa obrona z użyciem zapory aplikacyjnej firewall typu WAF. Regularne testy bezpieczeństwa i audyty kodu — zgodne z wytycznymi OWASP — pozwalają wychwycić podatne miejsca, zanim zrobi to atakujący.

Powiązane pojęcia

Najczęstsze pytania

Jak zabezpieczyć aplikację przed SQL injection?

Podstawą są zapytania parametryzowane (prepared statements), które oddzielają kod SQL od danych użytkownika. Dodatkowo warto stosować walidację i filtrowanie danych wejściowych, zasadę minimalnych uprawnień konta bazy oraz zaporę aplikacyjną WAF jako dodatkową warstwę ochrony.

Czym grozi udany atak SQL injection?

Skutki bywają poważne: wyciek danych osobowych i haseł, ich modyfikacja lub usunięcie, ominięcie logowania, a w skrajnych przypadkach przejęcie kontroli nad serwerem bazy. To jedna z najgroźniejszych i najczęściej wykorzystywanych podatności aplikacji webowych.