Blog Home  Home RSS 2.0 Atom 1.0 CDF  
Andreas Mersch - Security mit ASP.NET 2.0 Teil 2 - Eingabe Validierung
software development and more...
 
 Wednesday, January 31, 2007
Dieser zweite Teil der Webcastserie zum Thema Sicherheit mit ASP.NET 2.0 von Dominick Baier befasste sich schwerpunktmäßig mit der Thematik der Eingabe Validierung.

Für mich interessant waren die Punkte HTML Injection, SQL Injection und Cross Side Scripting (XSS). Hatte ich schon erwähnt, dass sich die Homepage meines Abiturjahrgangs vorzüglich für SQL Injection eignet..? Aber das gehört hier nicht hin!

Als Gegenmaßnahme, bzw. Vorsichtsmaßnahme gegen SQL Injection gehört grundsätzlich Stringverkettungen von SQL Statements und Eingabewerten zu vermeiden. Hierbei lassen sich mit simplen Mitteln eigene SQL Statements dem System unterschieben. Daher sollten SQL Statements in .NET stets über SqlCommand Objekte mit SqlParameter Objekten realisiert werden. Das Thema SQL Injection lässt sich damit schon einmal fürs erste absichern.

Html Injection und XSS ist ein Thema bei Gästebüchern, Foren, Web Content Management Systemen. Mit diesen Angriffen lassen sich z.B. Cookieinhalte auslesen und an Dritte weiterleiten. Die HttpCookie bietet einen kleinen Schutz vor einem Cookieklau über die Eigenschaft "HttpOnly = true". Diese Eigenschaft funktioniert jedoch nur im Internet Explorer und verhindert hier, dass ein Cookie von einer anderen Seite als der aufgerufenen abzufragen.

Grundsätzlich können alle Eingaben nach HTML / XML Tags gefiltert werden. Dies erfolgt über die Seiten-Direktive "ValidateRequest". Ist dieser Wert auf "true" gesetzt, werden alle Eingaben, die "<a-z", "<!", oder "&#" enthalten abgewiesen und mit einer "HttpRequestValidationException" beantwortet.

Besser eignet sich hier vielleicht die Verwendung der Microsoft AntiXss Bibliothek, die zum kostenlosen Download bei Microsoft bereitsteht. Mit dieser Bibliothek lässt sich ein Whitelisting bestimmter HTML / XML Tags realisieren (bsp. <b>..</b> für Fettdruck ist erlaubt).

Erwähnenswert ist auch das von Herrn Baier angesprochene "turkish I" Problem. Stringvergleiche auf bestimmte Werte müssen nicht zwangsläufig zum richtigen Ergebnis führen. So ist in der Darstellung ein "i" beim englischen, deutschen und türkischen Zeichensatz optisch das selbe Zeichen, die Repräsentation im Speicher beim türkischen Zeichensatz ist jedoch verschieden und würde bei einem Vergleich fehlschlagen.

Zum Schluss möchte ich noch das Tool "Microsoft Fiddler" erwähnen. Dieses Tool ist ein Http Debugging Proxy und eignet sich prima zum Nachverfolgen und Manipulieren von Http Requests. Herr Baier stellte dieses Tool im Zusammenhang von Manipulation von Postback Daten vor. Um eine Manipulation der Postback Daten und Viewstate Zuständen zu erschweren kann die Seitendirektive "EnableEventValidation=true" definiert werden. In seinem Beispiel wurde das Event eines unsichtbaren Buttons ausgelöst und ausgewertet. Ist die o.g. Seitendirektive jedoch aktiv reagiert ASP.NET 2.0 nur noch auf zum Abrufzeitpunkt sichtbare Controls. Bei eigenen Controls muss für dieses Feature eine entsprechende Funktion implementiert werden.

Zu guter Letzt noch eine Seitendirektive: "ClientTarget='downlevel'". Mit dieser (undokumentierten) Anweisung lässt sich die Verarbeitung einer ASP.NET Seite bei deaktiviertem JavaScript simulieren. Kann auch mal praktisch sein...

Die größten Schnitzer zum Thema Sicherheit sind im Übrigen unter http://www.owasp.org zu finden.


1/31/2007 2:12:44 PM (Mitteleuropäische Zeit , UTC+01:00)  #      ASP.NET | C#  | 
Copyright © 2012 andreas mersch. All rights reserved.
DasBlog 'Portal' theme by Johnny Hughes.
Pick a theme: