Nach ASP.NET 1.1 wird die Möglichkeit eingeführt, automatisch zu prüfen, ob XSS (Cross-Site-Skriptangriff) zum Senden von Formularen vorhanden ist. Wenn der Benutzer versucht, eine solche Eingabe zu verwenden, um die Seite zu beeinflussen, um das Ergebnis zurückzugeben, löst die ASP.NET -Engine ein httprequestValidationExceptionin aus. Standardmäßig wird die Seite mit dem folgenden Text zurückgegeben:
Dies ist eine sehr wichtige Sicherheitsfunktion von ASP.NET. Da viele Programmierer keine Ahnung von Sicherheit haben und die Existenz von Angriffen wie XSS nicht einmal kennen, wissen noch weniger Menschen, die die Initiative zum Schutz ergreifen müssen. ASP.NET ist zu diesem Zeitpunkt standardmäßig sicher. Auf diese Weise können Programmierer, die nicht viel über Sicherheit wissen, immer noch Websites mit bestimmten Sicherheitsschutzfunktionen schreiben.
Als ich jedoch die Suche nach httprequestValidationException oder einer potenziell gefährlichen Anfrage googelte . Der Wert wurde vom Kunden erkannt. Ich war überrascht zu feststellen Diese Funktion ist es nicht darum, sich darum zu kümmern, ob die Website des Programmierers diese Funktion nicht benötigt. Ich war so verängstigt vor dem Anblick. Das Sicherheitsbewusstsein sollte immer im Einklang mit jedem Programmierer sein.
Warum möchten viele Programmierer validiert werden? Das muss nicht sagen. Ein weiterer Teil ist nicht, dass der Benutzer die Eingabe von Zeichen erlaubt, die problemlos XSS verursachen, aber diese Form der Fehlerberichterstattung hasst. Nicht der Benutzer.
Für Programmierer, die diese Fehlermeldung gut verarbeiten möchten, ohne die Standard -Fehlermeldung von ASP.NET -Ausnahme zu verwenden, deaktivieren Sie bitte validateRequest = false nicht.
Die korrekte Art und Weise besteht darin, die Funktion page_error () zu Ihrer aktuellen Seite hinzuzufügen, um alle Ausnahmen zu erfassen, die während der Seitenverarbeitung ohne Verarbeitung auftreten. Geben Sie dem Benutzer dann eine rechtliche Fehlermeldung. Wenn die aktuelle Seite nicht page_error () enthält, wird diese Ausnahme zur Verarbeitung an global.asaxs application_error () gesendet, und Sie können dort auch eine allgemeine Ausnahmefehlerfunktion schreiben. Wenn an beiden Stellen keine Ausnahmebehandlungsfunktion geschrieben wird, wird diese Standard -Fehlerberichtsseite angezeigt.
Zum Beispiel braucht es nur einen sehr kurzen Code, um mit dieser Ausnahme zu handeln. Fügen Sie diesen Code der Code-Behind-Seite der Seite hinzu:
| Das Folgende ist ein zitierter Snippet: ProtectedVoidPage_error (ObjektSender, EventArgse) { ExceptionEx = server.getLasterror (); if (exishttprequestValidationException) { Antwort.Write (Bitte geben Sie eine legale Zeichenfolge ein.); Server.clearerror (); // Wenn ClearError () nicht ClearError () ist, wird diese Ausnahme weiterhin an application_error () übergeben. } } |
Auf diese Weise kann dieses Programm die Ausnahme von httprequestValidationException abfangen und eine angemessene Fehlermeldung entsprechend den Wünschen des Programmierers zurückgeben.
Dieser Code ist sehr einfach, daher hoffe ich, dass alle Freunde, die nicht wirklich Charaktere wie Benutzer eingeben dürfen, diese Sicherheitsfunktion nicht nach Belieben verbieten. . Dürfen.
Für Programmierer, die diese Funktion explizit verbieten, müssen sie verstehen, was sie tun, und müssen die Zeichenfolgen, die gefiltert werden müssen, manuell überprüfen, andernfalls löst Ihre Website Cross-Site-Scripting-Angriffe leicht aus.
Wie sollten Seiten mit dem reichen Texteditor behandelt werden?
Wenn die Seite Steuerelemente mit reichen Texteditoren enthält, führt sie zwangsläufig zur Einreichung von HTML -Tags der Klasse. In diesem Fall müssen wir validieren = falsch. Wie kann man mit Sicherheit umgehen?
Nach Angaben von Microsoft sollten wir eine Richtlinie eingehen, die als sicherheitsbasierte , ausdrücklich zulässige Richtlinie bezeichnet wird.
Zunächst codieren wir die Eingabezeichenfolge mit httputility.htmlencode () und verbieten die darin enthaltenen HTML -Tags vollständig.
Anschließend ersetzen wir die Sicherheits -Tags, an denen wir interessiert sind, und werden durch Ersatz () ersetzt. Wenn wir beispielsweise ein Etikett haben möchten, werden wir es explizit ersetzen.
Der Beispielcode lautet wie folgt:
| Das Folgende ist ein zitierter Snippet: voidSubmitBtn_click (ObjektSender, EventArgse) ... {{ // Die Eingabezeichenfolge codieren, damit alle HTML -Tags ungültig sind. StringBuildersB = NewStringBuilder ( Httputility.htmlencode (htmlinputTxt.text)); // dann erlauben wir selektiv <b> und <i> sb.replace (& lt; b & gt;, <b>); sb.replace (& lt;/b & gt;,); sb.replace (& lt; i & gt;, <i>); sb.replace (& lt;/i & gt;,); Response.write (sb.tostring ()); } |
Auf diese Weise erlauben wir einige HTML -Tags und verbieten gefährliche Tags.
Nach den von Microsoft angegebenen Ratschlägen sollten wir die folgenden HTML-Tags sorgfältig zulassen, da diese HTML-Tags möglicherweise zu Skriptangriffen im Cross-Standort führen.
Das Folgende ist ein zitierter Snippet:
|
Das vielleicht unverständlichste Ding hier ist <img>. Nach dem Lesen des folgenden Code sollten Sie jedoch die Gefahr verstehen.
| Das Folgende ist ein zitierter Snippet: <imgsrc = javaScript: alert ('Hallo');> <imgsrc = java 
 Skript: alert ('Hallo');> <imgsrc = java 
 Skript: alert ('Hallo');> |
Es ist möglich, die Ausführung von JavaScript durch das <Mg> -Tag zu verursachen, damit der Angreifer alles tun kann, was er verkleiden möchte.
Gleiches gilt für <style>:
| Das Folgende ist ein zitierter Snippet: <styletype = text/javaScript> ... alarm ('Hallo'); </style> |
| Das Folgende ist ein zitierter Snippet: Serverfehler in der Anwendung '/your ApplicationPath' Eine potenziell gefährliche Anfrage. Formwert wurde vom Kunden erkannt (txtName = <b>). Beschreibung: Die Anforderungsvalidierung hat einen potenziell gefährlichen Kundeneingabegericht erfasst, und die Bearbeitung der Anfrage wurde abgebrochen. Durch Einstellen von validateRequest = false in der Seitenrichtlinie oder im Abschnitt Konfiguration. Ausnahmedetails: System.Web.httprequestValidationException: Ein potenziell gefährlicher Anforderung. .... |