Wprowadzenie do wstrzykiwania SQL
- Wstrzyknięcie SQL to luka w zabezpieczeniach lub technika, która może zniszczyć bazę danych witryny lub aplikacji internetowej. Jest to jeden z najczęściej stosowanych ataków internetowych.
- Głównym celem wstrzyknięcia SQL jest uzyskanie dostępu do bazy danych witryny internetowej. Tak więc, aby wstrzyknięcie SQL zadziałało, potrzebna jest aplikacja internetowa połączona z bazą danych.
- Ponieważ baza danych zawiera wszystkie dane, w tym hasło administratora, tj. hasło logowania właściciela, atakujący witrynę może uzyskać dostęp do strony administratora, aby edytować witrynę, wypełniając formularz internetowy.
- Formularz internetowy zawiera nazwę użytkownika i hasła. Gdy użytkownik wprowadzi coś w polu wejściowym formularza internetowego, zapytanie SQL SELECT jest zaimplementowany w bazie danych.
- System próbuje dopasować dane wejściowe, tj. nazwę użytkownika i hasło wprowadzone przez użytkownika, z nazwą użytkownika i hasłem, które są już zapisane w bazie danych. Jeśli oba dane wejściowe są zgodne, wówczas użytkownik uzyskuje dostęp, w przeciwnym razie dostęp zostanie odmówiony użytkownikowi.
- Istnieją strony internetowe, które nie mają mechanizmu blokowania innych danych wejściowych. Takie strony internetowe są podatne na wstrzyknięcie SQL. W takim przypadku dowolne zapytanie SQL może zostać wprowadzone jako dane wejściowe, a system je wykona.
- Na przykład atakujący może wprowadzić zapytanie, aby pobrać całą bazę danych, usunąć bazę danych, zmodyfikować bazę danych i sprawić, by warunek zawsze był spełniony. Jeśli warunek dotyczący hasła jest zawsze spełniony, nie ma znaczenia, czy zostanie wprowadzone jakiekolwiek hasło. W przypadku hasła system uzyskuje dostęp do tych, które są przechowywane w bazie danych, ale jeśli zostanie wykonane zapytanie o usunięcie tabeli haseł w bazie danych, system zacznie pobierać dowolne hasło. W ten sposób atakujący może łatwo uzyskać dostęp do bazy danych. Teraz może znać wszystkie hasła osób zalogowanych na stronie, różne tabele i ich zawartość, wewnętrzną strukturę strony i wszelkie inne informacje związane z witryną.
- Ta metoda nazywa się wstrzykiwaniem SQL, w której wprowadzasz zapytanie do bazy danych, aby nim manipulować i uzyskać do niego nieautoryzowany dostęp. Jest to najniebezpieczniejszy rodzaj ataku na stronę internetową dla bazy danych opartej na SQL.
- Jednym ze sposobów zapobiegania takim atakom jest blokowanie niepotrzebnych danych wejściowych innych niż nazwy użytkowników i hasła.
- Polecenia wstrzykiwania SQL są wykonywane w czasie wykonywania. Dlatego unikaj poleceń wprowadzania dynamicznego. Zapobiegaj bazie danych za pomocą zapory aplikacji internetowej . Nie ujawniaj nikomu żadnych poufnych informacji dotyczących witryny.
- Witryny internetowe mogą ponieść ogromne straty danych i finansowe z powodu takich ataków SQL.
Przykład:
Załóżmy,, istnieje aplikacja internetowa z podłączoną do niej bazą danych. Ta aplikacja internetowa może pobierać dane wejściowe od użytkownika i przechowywać informacje w bazie danych lub pobierać dane z bazy danych i wyświetlać je użytkownikowi.
W obu przypadkach w aplikacji internetowej generowane jest zapytanie SQL lub zapytanie do bazy danych, które jest wysyłane do bazy danych i to zapytanie jest wykonywane w bazie danych, a odpowiednie informacje są zwracane z powrotem do aplikacji internetowej. Tak działa normalny scenariusz.
Tak więc, gdy atakujący używa wstrzykiwania SQL, próbuje manipulować tym zapytaniem do bazy danych, aby zrobić coś, czego nie powinien robić. Atakujący zmienia więc zapytanie SQL, manipuluje nim, wstawia do zapytania jakiś złośliwy ciąg, a następnie sprawia, że robi coś w nieautoryzowany sposób. Więc teraz zapytanie do bazy danych jest manipulowane przez atakującego, następnie to złośliwe zapytanie jest wysyłane do bazy danych, tam jest wykonywane i zwracane są odpowiednie wyniki.
Jest to znane jako wstrzyknięcie SQL. Wstrzyknięcie SQL to technika wstrzykiwania kodu używana do wykonywania złośliwych i dynamicznych instrukcji SQL. Ataki SQL to coś, czego atakujący używa do przejęcia kontroli nad serwerami baz danych.
Jak zapobiegać wstrzykiwaniu SQL
- Unikaj używania dynamicznego SQL
Danych wejściowych dostarczonych przez użytkownika nie należy umieszczać bezpośrednio w zapytaniu SQL, które będzie obsługiwane w bazie danych. Zamiast używać dynamicznego SQL, należy skorzystać z procedur składowanych, przygotowanych instrukcji i zapytań parametrycznych, ponieważ są one bezpieczniejsze w porównaniu z dynamicznymi zapytaniami SQL.
- Dane wprowadzone przez użytkownika muszą zostać oczyszczone
Rodzaj danych, które zostaną dostarczone przez użytkownika, musi być odpowiednio dopasowany i zweryfikowany z oczekiwanym typem.
- Dane poufne nie powinny być w postaci zwykłego tekstu
Przed przechowywaniem poufnych danych, takich jak hasła, w bazie danych, należy je odpowiednio zaszyfrować hashami. Salting musi zostać zastosowany do zaszyfrowanych skrótów, aby zapewnić dodatkową warstwę bezpieczeństwa poufnym danym.
- Błędy bazy danych nie powinny być wyświetlane bezpośrednio użytkownikowi
Informacje o błędach wyświetlane atakującemu mogą pomóc mu w uzyskaniu informacji o bazie danych.