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

5voto

maozx Punkte 309

In meinem Fall verwende ich das asp:Textbox-Steuerelement (Asp.net 4.5), anstatt die gesamte Seite für validateRequest="false" i verwendet

<asp:TextBox runat="server" ID="mainTextBox"
            ValidateRequestMode="Disabled"
 ></asp:TextBox>

für das Textfeld, das die Ausnahme verursacht hat.

5voto

Paweł Hajdan Punkte 17384

Solange diese sólo "<" und ">" (und nicht das doppelte Anführungszeichen selbst) und Sie verwenden sie in einem Kontext wie <input value=" ce " />, sind Sie sicher (während für <textarea> este </textarea> wären Sie natürlich angreifbar). Das mag Ihre Situation vereinfachen, aber für alles verwenden Sie lieber eine der anderen geposteten Lösungen.

4voto

Mike S. Punkte 51

Keiner der Vorschläge hat bei mir funktioniert. Ich wollte diese Funktion nicht für die gesamte Website deaktivieren, da ich in 99 % der Fälle nicht möchte, dass meine Benutzer HTML in Webformulare eingeben. Da ich der Einzige bin, der diese spezielle Anwendung verwendet, habe ich einfach meine eigene Umgehungsmethode entwickelt. Ich konvertiere die Eingaben im dahinter liegenden Code in HTML und füge sie in meine Datenbank ein.

4voto

Walden Leverich Punkte 4308

Wie bereits in meinem Kommentar zu Sel's Antwort Dies ist unsere Erweiterung zu einem benutzerdefinierten Anfragevalidator.

public class SkippableRequestValidator : RequestValidator
{
    protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex)
    {
        if (collectionKey != null && collectionKey.EndsWith("_NoValidation"))
        {
            validationFailureIndex = 0;
            return true;
        }

        return base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex);
    }
}

3voto

bastos.sergio Punkte 6546

Sie sollten die Methode Server.HtmlEncode verwenden, um Ihre Website vor gefährlichen Eingaben zu schützen.

Mehr Informationen hier

3 Stimmen

Verwenden Sie die Anti-XSS Library, um diesen Fehler zu vermeiden... dies ist unvollständig.

0 Stimmen

Eine genauere Erläuterung, wie dies zu tun ist, könnte hilfreich sein.

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