Cross-Site Scripting und SQL-Injection

Jeder Input ist böser Input

Die einfachste Möglichkeit, unerwünschten Inhalt zu vermeiden, besteht darin, grundsätzlich allen von außen eingehenden Inhalten zu misstrauen - und diese Inhalte zu filtern. Dazu lässt man am besten immer nur die Daten zu, die auch erwünscht sind. Wird beispielsweise in einem Formular eine E-Mail-Adresse verlangt, dann sollten Sie auch nur die Eingabe einer gültigen E-Mail-Adresse zulassen - und nichts anderes.

Stellt Ihr Test fest, dass die eingegebenen Daten nicht korrekt sind, geben Sie diese keinesfalls nochmals aus. Wenn der Inhalt XYZ123 nicht zum gewünschten Inhalt eines Feldes passt, dann zeigen Sie keine Seite mit dem Text: "Ihre Angabe XYZ123 ist ungültig" an - ansonsten öffnen Sie erneut eine Tür für XSS, weil die Eingabe ja unter Umständen wiederum Script-Code enthält, der auf dieser Fehlerseite erneut ausgeführt würde. Und genau das wollten Sie eigentlich vermeiden.

Der einfachste Weg, eingegebene Inhalte auf ihre Validität zu testen, besteht in der Verwendung von regulären Ausdrücken. Dabei nutzen Sie diese, um zu testen, ob die Benutzereingaben vollständig einem erwünschten, gültigen Muster entsprechen - weicht die Eingabe vom Muster ab, ignorieren Sie diese. Eine deutsche Postleitzahl besteht beispielsweise immer aus genau fünf Ziffern, nicht mehr und nicht weniger, und sie enthält schon gar keine sonstigen Zeichen.

Sowohl bei PHP und Perl als auch bei ASP und ASP.Net finden Sie umfangreiche Unterstützung für reguläre Ausdrücke. Im Fall von PHP beginnen diese Funktionen mit dem Prefix "preg_". Eine Zusammenfassung dieser Funktionen samt Beschreibung bietet die Site php.net.

Bei ASP finden Sie den Support für reguläre Ausdrücke per JavaScript und VBScript im Objekt RegExp. Bei ASP.NET erhalten Sie Zugriff auf Regular Expressions über den Namespace System.Text.RegularExpression.