Opis iniekcji SQL

Ukończone

Wstrzyknięcie kodu SQL to typowa metoda stosowana w przypadku naruszeń danych. Atak polega na dołączeniu polecenia SQL do pola formularza w frontonie sieci Web lub aplikacji, zwykle za pośrednictwem witryny internetowej, z zamiarem przerwania oryginalnego skryptu SQL i wykonania wstrzykniętego skryptu SQL. Dzieje się tak często, gdy dynamicznie generowany kod SQL jest używany w aplikacji klienckiej. Główną przyczyną ataków polegających na wstrzyknięciu kodu SQL jest słabe praktyki kodowania zarówno w aplikacjach klienckich, jak i procedurach składowanych bazy danych. Podczas gdy wielu deweloperów stosuje lepsze rozwiązania, wstrzyknięcie kodu SQL pozostaje istotnym problemem ze względu na występowanie starszych aplikacji i nowszych aplikacji utworzonych przez deweloperów, którzy nie ustalali priorytetów zapobiegania wstrzyknięciu kodu SQL.

Załóżmy na przykład, że aplikacja internetowa frontonu tworzy dynamiczną instrukcję SQL w następujący sposób:

SELECT * FROM Orders WHERE OrderId=25

Ten kod T-SQL jest tworzony, gdy użytkownik przechodzi do części historii zamówień sprzedaży witryny internetowej firmy i wprowadza wartość 25 w polu formularza numeru zamówienia. Załóżmy jednak, że użytkownik wprowadza więcej niż tylko numer identyfikatora, na przykład "25; DELETE FROM Orders;"

W takim przypadku zapytanie wysłane do bazy danych będzie wyglądać następująco:

SELECT * FROM Orders WHERE OrderID=25; DELETE FROM Orders;

Sposób działania zapytania w powyższym przykładzie polega na tym, że baza danych SQL jest informowana za pośrednictwem średnika ";", że instrukcja została zakończona i że należy uruchomić inną instrukcję. Następnie baza danych przetwarza następną instrukcję zgodnie z instrukcją, co spowoduje usunięcie wszystkich wierszy z tabeli Orders.

Początkowe SELECT zapytanie jest uruchamiane normalnie bez generowania żadnych błędów. Jednak w tabeli Orders (Zamówienia) nie są widoczne żadne wiersze. Drugie zapytanie w partii, które usuwa wszystkie wiersze, zostało również wykonane.

Jedną z technik służących do zapobiegania atakom polegającym na wstrzyknięciu kodu SQL jest sprawdzenie tekstu parametrów lub wartości wprowadzonych w polach formularza, wyszukując różne słowa kluczowe. Jednak to rozwiązanie zapewnia jedynie minimalną ochronę, ponieważ istnieje wiele, wiele sposobów wymuszania działania tych ataków. Niektóre z tych technik iniekcji obejmują przekazywanie danych binarnych, aparat bazy danych konwertuje dane binarne z powrotem na ciąg tekstowy, a następnie wykonując ciąg.

Aby zobaczyć przykład tego scenariusza, możesz uruchomić następujący kod T-SQL.

DECLARE @v VARCHAR(255)

SELECT @v = cast(0x73705F68656C706462 AS VARCHAR(255))

EXEC (@v)

Podczas akceptowania danych od użytkownika, niezależnie od tego, czy klient, czy pracownik, ważne jest sprawdzenie, czy dane wejściowe są zgodne z oczekiwanym typem danych, aby zapobiec atakom polegającym na wstrzyknięciu kodu SQL. Jeśli oczekiwano liczby, aplikacja kliencka powinna sprawdzić, czy dane wejściowe są rzeczywiście liczbą. Jeśli ciąg tekstowy jest oczekiwany, upewnij się, że ma prawidłową długość i nie zawiera żadnych danych binarnych. Aplikacja kliencka powinna zweryfikować wszystkie dane wejściowe użytkownika. Walidację można wykonać przez informowanie użytkownika o problemie i umożliwienie mu jego poprawienia lub dzięki bezproblemowemu obsłudze błędu w celu zapewnienia, że żadne polecenia nie są wysyłane do bazy danych lub systemu plików.

Podczas naprawiania kodu aplikacji zawsze powinien być priorytetem, mogą wystąpić przypadki, w których nie jest to możliwe. W takich przypadkach usługa Advanced Threat Protection może oferować dodatkową warstwę zabezpieczeń dla poufnych danych.