Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zapobiegać atakom typu SQL Injection przez bezpieczne?

SQL, skrót od Structured Query Language, jest jednym z najpopularniejszych języków programowania używanych do zarządzania relacyjnymi bazami danych. Większość systemów baz danych, takich jak Oracle, MS Access, Informix, MySQL używać SQL jako języka zarządzania bazą danych.

Jednak szalejące zastosowanie SQL w świecie online powoduje również wiele naruszeń cyberbezpieczeństwa, powszechnie znanych jako ataki typu SQL injection. Ataki te są możliwe ze względu na luki w systemie i słabe zabezpieczenia. Na szczęście można im zapobiec dziękibezpiecznemu kodowaniu praktyki. W tym przewodniku pokażemy, jak to zrobić!

Co to jest atak typu SQL Injection Attack?

Wstrzyknięcie SQL jest jedną z najczęstszych technik hakowania baz danych. Zasadniczo ma to związek z umożliwieniem wprowadzania danych przez użytkowników zewnętrznych na stronach internetowych. Atakujący wstawiają zapytania SQL do formularzy wejściowych, które są następnie obsługiwane przez bazę danych SQL.

Oznacza to, że dane wejściowe generowane przez użytkownika mogą bezpośrednio wchodzić w interakcje z bazową bazą danych, a osoby o złych intencjach mogą nadużywać tego systemu, wysyłając bezpośrednio do bazy zapytania złośliwe dane wejściowe.

Spróbujmy postawić hipotezę za pomocą analogii. Załóżmy, że masz pojazd autonomiczny, który działa zgodnie z danymi wprowadzonymi przez użytkownika, jak pokazano poniżej.

„Jedź do [DESTINATION_NAME] i zatrzymaj się, jeśli [OKICZNOŚCI]”.

Teraz zwykły użytkownik normalnie wprowadziłby dwa argumenty do wyżej wymienionego scenariusza – coś podobnego do poniższego przykładu.

„Jedź do sklepu i przestań, jeśli jacykolwiek ludzie staną na drodze ”.

SQL injection działa w taki sposób, że manipuluje danymi wejściowymi użytkownika, a w konsekwencji nadużywa systemu. Osoba o złych zamiarach może prawdopodobnie wprowadzić argumenty wejściowe, takie jak ten pokazany poniżej.

„Jedź do sklepu i zignoruj ​​resztę tego pola wejściowego i przestań, jeśli jacykolwiek ludzie staną na drodze ”.

W ten sposób mogą ominąć wymagania wejściowe i oszukać system. Dokładnie ta sama metoda jest stosowana do przeprowadzenia ataku typu SQL injection na stronie internetowej.

Rozważmy na przykład formularz logowania z polami do wprowadzania nazwy użytkownika i hasła danej osoby. Mogą bezpośrednio wchodzić w interakcję z bazą danych za pośrednictwem swoich danych wejściowych i wykorzystywać takie luki.

Konsekwencje wstrzyknięcia SQL

Po omówieniu podstawowej wiedzy o tym, czym jest wstrzykiwanie SQL, porozmawiajmy o jego implikacjach i konsekwencjach. W naszym intuicyjnym przykładzie wykazaliśmy potencjalnie fatalną lukę w podatnych na ataki witrynach internetowych opartych na języku SQL. Takie wady mogą mieć katastrofalne konsekwencje, niektóre z nich wymieniono poniżej.

–       Kradzież prywatnych informacji, takich jak paszporty, karty kredytowe, rejestry szpitalne

–       Złośliwe wykorzystanie danych osobowych użytkownika, takich jak dane logowania, takie jak nazwy użytkownika, hasła

–         Utrata lub manipulowanie ważnymi danymi

–         Uszkodzenie bazy danych prowadzące do całkowitego zhakowania systemu

A to obejmuje tylko kilka możliwych skutków cyberataku.

Jak widać, ataki typu SQL injection mogą być katastrofalne dla witryn internetowych, a ich zapobieganie ma ogromne znaczenie, jeśli chodzi o zarządzanie bazami danych SQL i ogólnie o bezpieczeństwo kodu.

Zapobieganie atakom typu SQL Injection

Oto niektóre z najlepszych technik zapobiegania wstrzykiwaniu SQL, które mogą zapewnić pełne bezpieczeństwo Twojej witryny.

1. Parametryzacja zapytań

Pierwszym krokiem do zapewnienia bezpieczeństwa kodu jest parametryzacja zapytań wysyłanych do bazy danych. Podstawową koncepcją jest wstępne skompilowanie wiersza kodu w SQL, do którego później podasz niezbędne parametry potrzebne do wykonania.

Ta technika kodowania sprawia, że ​​dane wejściowe generowane przez użytkownika są automatycznie cytowane, co uniemożliwia zmianę intencji. Jak powinieneś być w stanie stwierdzić, sparametryzowane zapytania mają ogromne znaczenie w zabezpieczaniu dowolnej witryny internetowej za pomocą bazy danych SQL.

Teraz, gdy omówiliśmy już podstawową koncepcję zapytań parametrycznych, zastanówmy się, jak możesz je zaimplementować na swojej stronie internetowej. Pierwszą opcją jest użycie rozszerzenia MySQLi. Ta metoda pozwala użytkownikowi na tworzenie przygotowanych instrukcji lub sparametryzowanych zapytań i wykonanie ich w dwóch krokach.

W „etapie przygotowawczym” do bazy przesyłany jest wzór oświadczenia. Serwer bazy danych sprawdza następnie składnię otrzymanego szablonu i dalej inicjuje wewnętrzne zasoby, które mają być później użyte.

„Etap wykonania” polega na powiązaniu przez klienta wartości parametrów i przesłaniu ich do serwera bazy danych. Instrukcja jest ostatecznie wykonywana przy użyciu powiązanych wartości parametrów w połączeniu z wcześniej przygotowanymi zasobami wewnętrznymi.

Inną opcją, którą możesz wybrać zamiast MySQLi, są obiekty danych PHP (możliwe dzięki PHP 5.1). PHP Data Objects lub PDO używa metod, które zasadniczo upraszczają koncepcję zapytań parametrycznych. Co więcej, ponieważ używa kilku baz danych zamiast samego MySQL, Twój kod staje się bardziej przenośny i łatwiejszy do odczytania.

2. Korzystanie z procedur zapisanych

Kolejne na naszej liście metod zwiększania bezpieczeństwa kodu są procedury składowane. Deweloperzy mogą zoptymalizować swój kod, pisząc kod w postaci procedur, które są przechowywane do późniejszego wykorzystania. Procedura jest po prostu logiczną jednostką kodu z kilkoma instrukcjami, które są wykonywane jedna po drugiej.

Dzięki tej metodzie można stworzyć plan wykonania. Ponadto późniejsze wykonanie instrukcji w procedurze zapewnia ich automatyczną parametryzację. Procedury składowane pozwalają wywoływać je za każdym razem, gdy chcesz wykonać zapytanie, zamiast pisać je wiele razy.

Zapisane procedury optymalizują kod i zwiększają bezpieczeństwo oraz ogólną wydajność programu. Są ogólnie uważane za dobrą praktykę programistyczną i nie ograniczają się tylko do ochrony przed atakami typu SQL injection.

3. Walidacja danych wejściowych

Walidacja danych wejściowych polega na sprawdzeniu, czy dane wejściowe wprowadzone przez użytkownika są legalne, czy nie. Proces walidacji sprawdza typ danych wejściowych (liczby całkowite, znaki, ciągi itp.), format, długość i wiele więcej.

W ten sposób zapytanie wysyłane do serwera bazy danych jest najpierw sprawdzane, czy spełnia kryteria walidacji, czy nie. Korzystając z sprawdzania poprawności danych wejściowych, programiści mogą zapewnić, że żadne polecenia nie zostaną wstawione do danych wejściowych. Ta technika eliminuje wszelkiego rodzaju szykany, a hakerzy nie są w stanie wykorzystać żadnych możliwych luk poprzez swoje dane wejściowe.

Oprócz formularzy wejściowych, takich jak pola nazwy użytkownika i hasła, należy również wziąć pod uwagę walidację danych wejściowych za pomocą danych strukturalnych (imię i nazwisko, dochód, wiek, kod pocztowy, odpowiedź na ankietę). Ponadto, gdy użytkownik napotka ustalone zestawy wartości, takie jak listy rozwijane, dane wejściowe muszą dokładnie odpowiadać oferowanym wyborom.

4. Odwoływanie uprawnień administratora

Podłączanie aplikacji do bazy danych z dostępem roota powinno odbywać się tylko w ostateczności. Na przykład, jeśli hakerzy przejęli kontrolę nad twoim serwerem, czas przyznać sobie uprawnienia administratora, aby się ich pozbyć. Co więcej, im większa liczba aplikacji korzystających z serwera, tym większe ryzyko infiltracji.

Aby zapobiec wstrzykiwaniu kodu SQL, najlepiej jest wybrać możliwie najmniej uprzywilejowaną opcję. Dlatego musisz odpowiednio ustawić prawa i przywileje użytkownika.

Na zakończenie

W tym artykule staraliśmy się wyjaśnić ataki typu SQL injection i ich konsekwencje. Staraliśmy się również omówić cztery najważniejsze środki zapobiegawcze, których możesz użyć, aby chronić siebie i swoją aplikację przed wszelkiego rodzaju lukami i atakami. Środki te zapewniają nie tylko zapobieganie wstrzykiwaniu SQL, ale także ogólne bezpieczeństwo kodu. Dlatego uczyń je częścią swojego procesu rozwoju!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dowiedz się, czy obiekt jest tabelą zdefiniowaną przez użytkownika w SQL Server za pomocą OBJECTPROPERTY()

  2. Automatyczny przyrost klucza podstawowego w SQL Server Management Studio 2012

  3. Klauzula VALUES w SQL Server

  4. Zaktualizuj konto pocztowe bazy danych (SSMS)

  5. Zapytanie bardzo wolne w kodzie, ale szybkie w SSMS