Jedes Mal, wenn ein Nutzer einen Beitrag mit <
ou >
in einer Seite in meiner Webanwendung, bekomme ich diese Ausnahme ausgelöst.
Ich möchte nicht in die Diskussion über die Klugheit des Auslösens einer Ausnahme oder des Absturzes einer gesamten Webanwendung gehen, weil jemand ein Zeichen in ein Textfeld eingegeben hat, aber ich suche nach einer eleganten Möglichkeit, dies zu behandeln.
Abfangen der Ausnahme und Anzeigen
Es ist ein Fehler aufgetreten. Bitte gehen Sie zurück und geben Sie das gesamte Formular noch einmal ein, aber verwenden Sie dieses Mal bitte nicht <
scheint mir nicht professionell genug zu sein.
Deaktivieren der Nachvalidierung ( validateRequest="false"
) wird dieser Fehler definitiv vermieden, aber die Seite ist dadurch anfällig für eine Reihe von Angriffen.
Idealerweise: Wenn eine Rückmeldung erfolgt, die in HTML eingeschränkte Zeichen enthält, wird der gepostete Wert in der Formularsammlung automatisch HTML-kodiert. So wird der .Text
Eigenschaft meines Textfeldes wird sein something & lt; html & gt;
Gibt es eine Möglichkeit, wie ich dies von einem Handler aus tun kann?
76 Stimmen
Beachten Sie, dass dieser Fehler auch auftreten kann, wenn Sie HTML-Entitätsnamen (&) oder Entitätsnummern (') in Ihrer Eingabe haben.
32 Stimmen
Nun, da es meine Frage ist, glaube ich, dass ich definieren kann, worum es eigentlich geht: einen ganzen Anwendungsprozess zum Absturz zu bringen und eine allgemeine Fehlermeldung auszugeben, weil jemand ein "<" eingegeben hat, ist übertrieben. Vor allem, weil man weiß, dass die meisten Leute einfach 'validateRequest=false' eingeben werden, um es loszuwerden, und damit die Schwachstelle wieder aufreißen
10 Stimmen
@DrewNoakes: Entitätsnamen (&) scheinen nach meinen Tests (getestet in .Net 4.0) kein Problem zu sein, obwohl Entitätsnummern (') die Validierung nicht bestehen (wie Sie sagten). Wenn Sie die Methode System.Web.CrossSiteScriptingValidation.IsDangerousString mit dem .Net Reflector zerlegen, werden Sie sehen, dass der Code speziell nach html-Tags (beginnend mit <) und Entity-Nummern (beginnend mit &#) sucht
9 Stimmen
Erstellen Sie eine neue Website in VS2014 unter Verwendung des Standard-MVC-Projekts und führen Sie sie aus. Klicken Sie auf den Registrierungslink, fügen Sie eine beliebige E-Mail hinzu und verwenden Sie "<P455-0r[!" als Kennwort. Derselbe Fehler aus der Box, nicht versuchen, etwas Bösartiges zu tun, wird das Passwort-Feld nicht angezeigt werden, so dass es nicht ein XSS-Angriff, aber der einzige Weg, um es zu beheben ist, vollständig zu entfernen Validierung mit der ValidateInput(false)? Der AllowHtml-Vorschlag funktioniert in dieser Situation nicht und führt immer noch zu demselben Fehler. Ein potenziell gefährlicher Request.Form-Wert wurde vom Client erkannt (Password="<P455-0r[!").
0 Stimmen
TL;DR setzen
<httpRuntime requestValidationMode="2.0" />
in web.config0 Stimmen
Siehe auch ASP.NET 4 Einschneidende Änderungen für einige Hintergrundinformationen.