4 Stimmen

Ist es nicht gefährlich, wenn ich ValidateRequest auf false setze?

Ich bin mit FreeTextBox HTML-Editor in einigen Webforms in meinem asp.net-Projekt. wenn ich nicht ValidateRequest Eigenschaft auf false ich diesen Fehler erhalten:

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

Im Verwaltungsordner ist das OK, denn nur autorisierte Benutzer können damit arbeiten. Aber wie sieht es mit öffentlichen Seiten aus, wie z.B. Rubriken, wo jeder Benutzer Zugang hat, um Kommentare zu hinterlassen (mit FreeTextBox zum Sammeln von Benutzerkommentaren)? Ist das nicht riskant für XSS-Attacken? Wenn die Antwort nicht Ja ist, wofür ist dann die Eigenschaft ValidateRequest?

6voto

kemiller2002 Punkte 110605

Nein, Sie haben recht, das ist potenziell gefährlich. Die Idee dahinter ist, dass .net nicht einschränken will, was mit seinen Steuerelementen gemacht werden kann, aber gleichzeitig viele der Möglichkeiten für eine Sicherheitslücke entfernen will. Die ValidateRequest-Eigenschaft ist dazu da, um ASP.NET mitzuteilen: "Hey, mach dir keine Gedanken darüber. Ich werde es selbst validieren, denn ich erwarte etwas, das für dich gefährlich aussehen könnte."

Es ist so eingestellt, dass Antworten standardmäßig validiert werden, da es gefährlich ist, potenzielle xss-Angriffe nicht zu validieren, und es ist besser, einen Validierungsfehler zu erhalten, den Sie nicht bemerkt haben, als dass Ihre Website gehackt wird.

3voto

Guffa Punkte 663241

Ja, es ist OK, die Anforderungsüberprüfung zu deaktivieren.

Die Anforderungsvalidierung fängt die häufigsten Zeichen und Ausdrücke ab, die bei XSS-Angriffen und ähnlichen Angriffen verwendet werden, kann aber nicht jede mögliche Art eines Exploits abfangen. Auch wenn die Anforderungsüberprüfung Schutz vor den meisten Angriffen bietet, sind Sie damit nie vollständig geschützt, sondern müssen weiterhin alle Eingaben als potenziell böse behandeln.

Der erste Zweck der Anforderungsvalidierung besteht darin, Anwendungen zu schützen, die von Leuten erstellt werden, die keine Ahnung von XSS-Angriffen und Ähnlichem haben, damit sie nicht völlig ungeschützt sind. Wenn Sie wissen, wie man Eingaben korrekt behandelt, und dies auch korrekt umsetzen können, ist die Anforderungsvalidierung nicht erforderlich.

1voto

LaustN Punkte 712

Werfen Sie einen Blick auf ValidateRequest auf MSDN. Dies bedeutet, dass die Eingabe auf potenziell gefährliche Inhalte geprüft wird. Das ist alles gut und schön, wenn Sie Eingabefelder und dergleichen nur für Klartext verwenden. Das Problem beginnt, sobald der Benutzer z.B. einen Link zu einer anderen Seite angeben soll oder zusätzliche Daten (z.B. in XML-Form) in versteckten Eingabefeldern gespeichert werden sollen. ValidateRequest wird diese Art von Inhalt nicht tolerieren. ValidateRequest ist eine nette Funktion, die ich am Ende fast immer deaktiviere, aber die Deaktivierung bedeutet, dass Sie Ihre Eingaben selbst validieren müssen. Meiner Meinung nach sollten Sie Eingaben ohnehin immer selbst validieren.

1voto

Boriss Pavlovs Punkte 1431

FreeTexBox-Steuerelement und "Ein potenziell gefährlicher Request.Form-Wert wurde vom Client erkannt"

Sie können eine andere Entscheidung treffen

 if(!this.Page.ClientScript.IsOnSubmitStatementRegistered("Replace"))
{
 string script = @"if (Page_IsValid){FTB_API['" + txtBox.ClientID + @"'].initialized=false;   FTB_API['"  + txtBox.ClientID + @"'].htmlEditor.value=FTB_FreeTextBox.prototype.HtmlEncode( FTB_API['" + txtBox.ClientID + @"'].htmlEditor.value);}";
 this.Page.ClientScript.RegisterOnSubmitStatement(this.Page.GetType(), "Replace", script);
}

und vergessen Sie nicht, die Symbole zu ersetzen, wenn Sie einen String vom Server an die Client-Anwendung senden

if(!String.IsNullOrEmpty(yourstring)) txtBox.Text= yourstring.Replace("&gt;", ">").Replace("&lt;", "<").Replace("&amp;", "&").Replace("&quot;", ('"').ToString()).Replace("&#146;", "'");

In diesem Fall brauchen Sie ValidateRequest nicht zu deaktivieren. Sie können auch Zeichen ersetzen, bevor Sie eine Zeichenfolge in der Datenbank speichern.

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