Die Injektion kann bei jeder SQL-Anweisung nicht ordnungsgemäß ausgeführt werden.
Nehmen wir zum Beispiel an, dass Ihre Kommentartabelle zwei Felder hat, eine Ganzzahl-ID und die Kommentarzeichenfolge. So sollten Sie INSERT
wie folgt:
INSERT INTO COMMENTS VALUES(122,'I like this website');
Betrachten jemand den folgenden Kommentar eingeben:
'); DELETE FROM users; --
Wenn Sie nur den Kommentartext in das, ohne dass dies jeder Abarbeitung von SQL setzen könnte schalten Sie einzelne INSERT
um die folgenden zwei gefolgt von einem Kommentar Aussagen:
INSERT INTO COMMENTS VALUES(123,''); DELETE FROM users; -- ');
Dies würde alles von Ihrer users
Tabelle löschen. Und es gibt Leute, die bereit sind, den ganzen Tag damit zu verbringen, den richtigen Tabellennamen zu finden, um ihn mit Trial-and-Error und verschiedenen Tricks zu leeren. Here's a description of how you could perform an SQL Injection attack.
Sie müssen parameterized SQL statements verwenden, um dies zu verhindern.
Und das ist nicht nur aus Sicherheitsgründen. Zum Beispiel, wenn Sie erstellen SQL-Anweisungen naiverweise den folgenden Kommentar:
I'm just loving this website
würde eine SQL-Syntax-Fehler verursachen, da der Apostroph von SQL als Schlusskurs interpretiert wird.
Zusätzliche Informationen: Wenn Sie eine Webseite erstellen, konzentrieren Sie sich nicht nur auf die SQL-Injektion. Überprüfen Sie auch die XSS-Gefahr des Textes, bevor Sie ihn in Ihre Datenbank einfügen. Ist jeder Ausgabecode über Server.HtmlEncode (...) gesichert? –