Bobby Tables: a guide to preventing SQL injection (Polski)
dlaczego Szkoła Bobby ' ego straciła swoje rekordy?
Szkoła zapisuje nazwiska swoich uczniów w tabeli nazwanej uczniami. Kiedy przybywa nowy uczeń, szkoła wpisuje jego / jej imię do tego stołu. Kod wykonujący wstawianie może wyglądać następująco:
pierwsza linia tworzy łańcuch zawierający instrukcję SQL INSERT. Zawartość zmiennej $studentName
jest wklejona do instrukcji SQL., Druga linia wysyła wynikowe polecenie SQL do bazy danych. Pułapką tego kodu jest to, że poza danymi, w tym przypadku zawartość $studentName
, staje się częścią instrukcji SQL.
najpierw zobaczmy, jak wygląda instrukcja SQL, jeśli wstawimy ucznia o imieniu John:
robi to dokładnie to, czego chcemy: wstawia Johna do tabeli uczniów.
teraz wstawiamy małe tabele, ustawiając $studentName
na Robert"); DROP TABLE Students;--
., Polecenie SQL staje się:
to wstawia Roberta do tabeli studentów. Po instrukcji INSERT następuje teraz Instrukcja DROP TABLE, która usuwa całą tabelę uczniów. AUĆ!
jak unikać tabel Bobby
jest tylko jeden sposób na uniknięcie ataków tabel Bobby
- nie należy tworzyć poleceń SQL zawierających dane zewnętrzne.
- używa sparametryzowanych wywołań SQL.
To jest to. Nie próbuj uciekać od nieprawidłowych znaków. Nie próbuj robić tego sam. Dowiedz się, jak używać sparametryzowanych instrukcji. Zawsze, za każdym razem.,
pasek ma jedną rzecz. Odpowiedzią nie jest „dezynfekowanie danych wejściowych” samodzielnie. Jest podatny na błędy.