Do zabezpieczeń aplikacji internetowej przed atakiem SQL Injection nie należy
A. minifikacja plików CSS.
Dobrze. Minifikacja CSS tylko zmniejsza rozmiar pliku stylów, nie chroni bazy.
B. walidacja danych przesyłanych z formularza.
Źle. Walidacja odrzuca nieoczekiwane dane, więc należy do zabezpieczeń.
C. ograniczenie uprawnień konta bazy danych, z którego korzysta aplikacja.
Źle. Minimalne uprawnienia ograniczają skutki udanego ataku.
D. stosowanie zapytań przygotowanych (prepared statements).
Źle. Zapytania przygotowane to najskuteczniejsza ochrona przed SQL Injection.
Minifikacja CSS usuwa z arkusza stylów spacje, komentarze i znaki nowej linii, żeby plik był mniejszy i szybciej się pobierał. To optymalizacja wydajności, która nie ma żadnego związku z bazą danych. SQL Injection polega natomiast na wklejeniu do pola formularza fragmentu zapytania, na przykład
' OR '1'='1, który zmienia sens polecenia SQL budowanego przez aplikację. Do zapamiętania: przed wstrzyknięciem chronią zapytania przygotowane, walidacja danych i minimalne uprawnienia konta bazy. W PHP zapytanie przygotowane tworzy się przez $pdo->prepare() albo mysqli_prepare(), a dane przekazuje się osobno, więc nie mogą stać się częścią polecenia.Trzy pozostałe działania tworzą razem warstwową obronę przed SQL Injection. Zapytania przygotowane oddzielają treść polecenia od danych: serwer najpierw otrzymuje szablon z miejscami na wartości, a potem same wartości, więc wpisany tekst nigdy nie zostanie wykonany jako kod SQL - to najskuteczniejsza ochrona. Walidacja danych z formularza odrzuca wartości niezgodne z oczekiwaniami, na przykład litery w polu wieku. Ograniczenie uprawnień konta bazy zmniejsza szkody, gdy atak mimo wszystko się uda: konto aplikacji bez prawa
DROP nie usunie tabel. Minifikacja plików CSS przyspiesza ładowanie strony, ale nie ma wpływu na zapytania wysyłane do bazy danych. Dobrą praktyką jest też niewyświetlanie użytkownikowi szczegółowych komunikatów błędów bazy, bo podpowiadają atakującemu strukturę tabel. Plik CSS trafia do przeglądarki użytkownika i w ogóle nie uczestniczy w komunikacji aplikacji z bazą danych.