dedlfix: ASP-Website attackiert

Beitrag lesen

echo $begrüßung;

Das ist aber keine SQL-Injektion sondern eine HTML-Injection. SQL-Injection hat das Ziel, ein SQL-Statement so zu beinflussen, dass es etwas anderes ausführt als von seinem Autor beabsichtigt.
Aber genau das ist doch passiert. Ich dachte, das hätte ich auch so beschrieben.

Du hast beschrieben, dass jemand Inhalte in deine Datenbank bringen konnte, die zwar von dir nicht gewünscht waren, aber aus Sicht der Datenbank keine SQL-Injektion darstellt. Diese Daten konnten erst nach ihrem Auslesen, beim Einfügen in einen HTML-Kontext unerwünscht als Code interpretiert werden. So las sich für mich deine Beschreibung.

Das Eintragen von Daten ist ein ganz normaler und erwünschter Vorgang. Das Prüfen der Daten auf gewünschten Inhalt ist auch nicht Bestand einer SQL-Injection-Absicherung.
Dann habe ich den kompletten Thread bis dato mißverstanden und auch alle, die geantwortet haben, lagen falsch.

Naja, sie sind auf das von die erwähnte SQL-Injection angesprungen. Das ist auch ein zu beachtendes Thema, aber eben nicht das einzige.

Auch gut, wenn du dich dem Thema zuwendest, aber das allein hätte den Angriff nicht verhindert.
Warum nicht?

INSERT INTO table (feld) VALUES ('<script type="text/javascript">...</script>')

ist keine SQL-Injection. Das ist ein gültiges SQL-Statement. Selbst wenn du " statt ' zur Stringbegrenzung verwendet hättest, und die " in den Daten ordentlich maskiert hättest (um sie eben gegen das Interpretieren als Sonderzeichen zu sichern), wäre es gelungen, den HTML-Code in deine Datenbank zu schreiben.

INSERT INTO table (feld) VALUES ("<script type=""text/javascript"">...</script>")

Das sind nur ganz normale Daten aus Sicht des DBMS.

Wenn es aber möglich wäre zu verhindern, daß _unerwünschter_ Code in meine Datenbank gelangt, bräuchte ich mir darüber keine Gedanken zu machen. Ich ging jetzt davon aus, daß das Verwenden von Prepared Statements mich diesem Ziel ein gutes Stück näher bringt.

Nein. Aus Sicht des DBMS handelt es sich ja nicht um Code sondern, wie gesagt, nur um Daten. Als Code wird er erst wieder interpretiert, wenn er in den HTML-Kontext gelangt. Dagegen hilft nur die HTML-gerechte Behandlung der Daten, indem man die HTML-eigenen Zeichen beachtet und entsprechend behandelt.

echo "$verabschiedung $name";