1590 Stimmen

Ein potenziell gefährlicher Request.Form-Wert wurde vom Client erkannt

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

1voto

Voigt Punkte 69

Verwenden Sie die Server.HtmlEncode("yourtext");

1voto

syntap Punkte 913

Ich habe eine Web Forms-Anwendung, die dieses Problem für ein Textfeld Kommentare Feld hatte, wo Benutzer manchmal eingefügt E-Mail-Text, und die "<" und ">" Zeichen aus E-Mail-Header-Informationen würde in dort kriechen und diese Ausnahme auslösen.

Ich habe das Problem aus einem anderen Blickwinkel betrachtet... Da ich bereits Ajax Control Toolkit verwendete, konnte ich einen FilteredTextBoxExtender verwenden, um die Eingabe dieser beiden Zeichen in das Textfeld zu verhindern. Ein Benutzer, der Text kopiert und einfügt, erhält dann das, was er erwartet hat, ohne diese Zeichen.

<asp:TextBox ID="CommentsTextBox" runat="server" TextMode="MultiLine"></asp:TextBox>
<ajaxToolkit:FilteredTextBoxExtender ID="ftbe" runat="server" TargetControlID="CommentsTextBox" filterMode="InvalidChars" InvalidChars="<>" />

0voto

KiranC Punkte 517

In .Net 4.0 und höher, was der Normalfall ist, setzen Sie die folgende Einstellung in system.web

<system.web>
     <httpRuntime requestValidationMode="2.0" />

0voto

Sanjeev Singh Punkte 3800

Wie behebt man dieses Problem für AjaxExtControls in ASP.NET 4.6.2:

Wir hatten das gleiche Problem mit dem AjaxExtControls Rich Text Editor. Dieses Problem begann direkt nach dem Upgrade von .NET 2.0 auf .NET 4.5. Ich habe mir alle SOF-Antworten angesehen, konnte aber keine Lösung finden, die die von .NET 4.5 gebotene Sicherheit nicht beeinträchtigt.

Fix 1 (nicht empfohlen, da es die Anwendungssicherheit beeinträchtigen kann) : Ich habe getestet, nachdem ich dieses Attribut in requestValidationMode = "2.0 und es funktionierte, aber ich hatte Bedenken wegen der Sicherheitsfunktionen. Dies ist also wie eine Verschlechterung der Sicherheit für die gesamte Anwendung zu beheben.

Fix 2 (empfohlen): Da dieses Problem nur bei einem der AjaxExtControl auftrat, konnte ich dieses Problem schließlich mit dem folgenden einfachen Code lösen:

editorID.value = editorID.value.replace(/>/g, "&gt;");
editorID.value = editorID.value.replace(/</g, "&lt;");

Dieser Code wird auf der Client-Seite (Javascript) ausgeführt, bevor die Anfrage an den Server gesendet wird. Beachten Sie, dass die editorID nicht die ID ist, die wir auf unseren html/aspx-Seiten haben, sondern die ID des Rich-Text-Editors, den AjaxExtControl intern verwendet.

0voto

Colin Punkte 21707

Keine der Antworten hat bei mir funktioniert. Dann entdeckte ich, dass ich den folgenden Code entfernen musste, damit es funktionierte:

//Register action filter via Autofac rather than GlobalFilters to allow dependency injection
builder.RegisterFilterProvider();
builder.RegisterType<OfflineActionFilter>()
    .AsActionFilterFor<Controller>()
    .InstancePerLifetimeScope();

Ich kann nur zu dem Schluss kommen, dass etwas in Autofacs RegisterFilterProvider das Attribut validateRequest bricht oder außer Kraft setzt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X