Instruktor: Jak
widzieliście, zastrzyki SQL są bardzo niebezpieczne.
Poza tym są bardzo łatwe (mamrocze) i bardzo łatwe do znalezienia.
Znajdziesz je wszędzie w niektórych naprawdę znanych witrynach.
Ludzie próbują zapobiec tym lukom za pomocą filtrów.
Filtry mogą sprawiać wrażenie, że nie ma żadnych
exploitów, ale jeśli faktycznie spróbujesz mocniej, używając kodowania, różnych
rodzajów kodowania lub używając proxy, będziesz w
stanie ominąć większość z tych filtrów.
Niektórzy programiści używają czarnej listy.
Na przykład, uniemożliwiają użycie złączy, uniemożliwiają
użycie wstawek i podobnych rzeczy.
Znów nie jest w 100% bezpieczny.
Można go ominąć.
Używasz białej listy?
Dokładnie te same problemy, co czarna lista.
Najlepszym sposobem na to jest zaprogramowanie aplikacji
internetowej w taki sposób, aby nie pozwalała na wstrzyknięcie i
wykonanie kodu.
Najlepszym sposobem na to jest użycie sparametryzowanej instrukcji, w
której dane i kod są oddzielone.
Najlepszym sposobem pokazania, co mam na
myśli, jest użycie przykładu.
W tym przykładzie zachowuję najmniejszą ilość programowania.
Nie chcę, żeby to był przykład programowania.
W rzeczywistości są tam błędy w programowaniu, ale
staram się dać ci pojęcie więcej
niż jak je zaprogramować.
Do tego celu służył podatny kod, na który patrzyliśmy.
Kiedyś wybierał * z kont, których nazwa użytkownika jest równa temu, co
umieściliśmy w polu tekstowym 1.
Potem wstawialiśmy do pola tekstowego
1, po
prostu wstawmy tutaj, mówiliśmy „admin”, a
następnie zamykaliśmy cytat.
Następnie możemy dokonać wyboru związku i wykonać
coś innego.
Potem, kiedy skończyliśmy, dodawaliśmy komentarz, który w zasadzie
ignoruje wszystko, co następuje po nim.
Więc kiedy to skopiujesz
i wkleisz tutaj, zobaczysz,
co się stanie.
Teraz pozbądźmy się tego,
ponieważ to sprawia, że kolory nie są ładne.
(mamrocze), po prostu skomentuję to.
Dokonuje wyboru * z kont, na
których nazwa użytkownika jest
równa admin, unia wybiera i wykonuje wszystko, co chcemy zrobić.
Jest to bardzo złe i bardzo trudne do ochrony.
Jak powiedziałem, używając filtrów
i innych rzeczy, tylko ukryjemy problem, nie naprawimy go.
Najlepszym sposobem na
to jest użycie sparametryzowanych instrukcji w ten sposób.
Jest to bezpieczny sposób na zrobienie tego.
Przede wszystkim przygotuj swoje oświadczenie.
Większość języków takich jak
PHP i wszystkie one mają taką funkcję.
Możesz przygotować wybierz * z kont, których nazwa
użytkownika jest równa znakowi zapytania.
Następnie wysyłasz wartości.
PHP wie teraz.
Instrukcja SQL jest wybierana * z kont,
których nazwa użytkownika jest równa czemuś.
Potem przyjmie wartość pola tekstowego 1.
Więc nawet jeśli wejdziemy i użyjemy
naszego bardzo podstępnego oświadczenia
tutaj i wkleimy
go tam, aplikacja internetowa będzie wiedziała, że wartością
tego jest wybór unii administracyjnej.
W rzeczywistości spróbuje
przejść i wybrać * z kont, na których
nazwa użytkownika, a następnie doda własne
cytaty i spróbuje znaleźć nazwę użytkownika o następującej nazwie użytkownika.
Cała ta sprawa zostanie wykonana w ten sposób.
Będzie to więc * z
kont, na których nazwa użytkownika jest równa admin union select,
to hashtag.
Cokolwiek umieścisz w polu tekstowym, zostanie wysłane jako wartość.
Aplikacja internetowa będzie wiedziała, że jest to
wartość, nie jest to kod i nigdy go nie wykona.
W ten sposób ochroni Cię przed wstrzyknięciami SQL.
Możesz użyć filtrów jako drugiej linii
obrony, a także radzę,
abyś używał możliwie najmniejszych uprawnień.
Dla każdej bazy danych użyj jednego użytkownika
z najmniejszą liczbą wymaganych uprawnień.
Nie pozwól użytkownikom robić nic, co chcą.
Jeśli jest to prosta strona internetowa, która dokonuje tylko wyboru,
pozwól tylko użytkownikowi na wybór.
Jeśli musi tylko wybrać i wstawić,
pozwól im tylko na wybranie i wstawienie.
Jest to zasada, której powinieneś przestrzegać ze wszystkim,
nawet w systemach Linux.
Upewnij się, że uprawnienia są zawsze możliwie najmniejsze.
Każdy użytkownik nie ma żadnych dodatkowych uprawnień, których
nie potrzebuje.