Jedna z największych klas luk w zabezpieczeniach sieci Web jest znana jako „wstrzyknięcie SQL” lub SQLi. Strukturalny język zapytań, czyli SQL, to język używany do interakcji z większością baz danych, chociaż w zależności od bazy danych stosuje się wiele wariantów języka Platforma. Każda witryna internetowa, która przechowuje dane użytkownika, takie jak informacje o koncie, lub udostępnia funkcję przesyłania przez użytkownika, taka jak witryna hostująca obrazy, będzie korzystać z bazy danych do przechowywania tych danych.
Wskazówka: SQL jest zwykle wymawiany „ess cue ell” lub „sequel”, przy czym pierwsza opcja jest bardziej powszechna w brytyjskim angielskim, a druga bardziej rozpowszechniona w amerykańskim angielskim. Obie wymowy są ogólnie rozumiane w kontekście mówienia o bazach danych.
Co to jest SQLi?
SQLi to luka, w której twórcy stron internetowych projektujący kod komunikujący się między serwer WWW i baza danych nie zapewniają ochrony przed poleceniami SQL wysyłanymi przez użytkownik. Problem polega na tym, że można uciec z instrukcji bazy danych i dodać nowe argumenty lub zupełnie nową instrukcję. Zmieniona lub druga instrukcja bazy danych może wykonywać szereg działań, w tym potencjalnie usuwanie na dużą skalę lub wycieki danych.
Exploity zazwyczaj polegają na tym, aby istniejące instrukcje były prawdziwe we wszystkich okolicznościach lub dostarczaniu drugiego polecenia wsadowego, które wykonuje określoną akcję, taką jak usuwanie lub wyświetlanie wszystkich danych. Na przykład instrukcja SQL logowania do serwisu WWW może sprawdzić, czy podana nazwa użytkownika i hasło pasują do wpisu w bazie danych. Aby uzyskać dostęp do exploita wstrzykiwania SQL, można spróbować dodać klauzulę „lub prawda”, taką jak „lub 1=1”. Spowoduje to wykonanie polecenia w stylu „zaloguj się z [ta] nazwa użytkownika, jeśli hasło jest [to] lub to stwierdzenie jest prawdziwe”.
Jak zapobiegać SQLi?
SQLi był kiedyś bardzo powszechnym sposobem na włamywanie się do baz danych witryn internetowych, a następnie wyciek do Internetu. Dzięki wspólnym wysiłkom mającym na celu zapewnienie, że świadomość bezpieczeństwa jest częścią szkolenia dla programistów, ta klasa luk w zabezpieczeniach została w dużej mierze rozwiązana i jest już rzadko spotykana.
Prawidłową metodą zapobiegania SQLi jest użycie przygotowanych instrukcji, znanych również jako zapytania parametryczne. Tradycyjnie instrukcje SQL są deklarowane, a dane wprowadzane przez użytkownika są do nich łączone podczas tej deklaracji. Przy przygotowanych instrukcjach wypisywane jest polecenie bazy danych, a następnie funkcja sperate uruchamia polecenie i wstawia dane użytkownika. Chociaż może to wydawać się niewielką różnicą, całkowicie zmienia sposób obsługi polecenia. Różnica uniemożliwia uruchamianie jakichkolwiek znaczących poleceń SQL i traktuje wszystkie dane wejściowe użytkownika jako ciąg znaków, zapobiegając wstrzykiwaniu SQL.