Wstrzyknięcie może się zdarzyć w przypadku nieprawidłowego uruchomienia instrukcji SQL.
Na przykład udawajmy, że Twoja tabela komentarzy zawiera dwa pola, identyfikator liczby całkowitej i ciąg komentarza. Więc bym INSERT
następująco:
INSERT INTO COMMENTS VALUES(122,'I like this website');
Rozważmy kogoś wprowadzając następującą opinię:
'); DELETE FROM users; --
Jeśli wystarczy umieścić komentarz ciąg w SQL bez spodowało to może włączyć się do jednego INSERT
następujące dwa oświadczenia z komentarzem:
INSERT INTO COMMENTS VALUES(123,''); DELETE FROM users; -- ');
To usunąć wszystko od stolika users
. I są ludzie, którzy chcą spędzić cały dzień na szukaniu odpowiedniego tablename do opróżnienia przy użyciu prób i błędów oraz różnych sztuczek. Aby uniknąć tego problemu, należy użyć parameterized SQL statements.
I to nie tylko ze względów bezpieczeństwa. Na przykład, jeśli tworzysz swoje SQL naiwnie następujący komentarz:
I'm just loving this website
spowoduje błąd składni SQL powodu apostrofu interpretowane przez SQL jako zamknięcia cytatu.
Informacje dodatkowe: Podczas tworzenia strony internetowej nie skupiaj się tylko na wtrysku sql. Sprawdź również niebezpieczeństwo XSS przed wstawieniem go do bazy danych. Czy każdy kod wyjściowy jest zabezpieczony przez Server.HtmlEncode (...)? –