| 

.NET C# Java Javascript Exception

0
Hallo,

beim Laden einer Seite schalte ich im Page.OnPreInit() die EventValidtion ab:

protected override void OnPreInit(EventArgs e)
{
base.OnInit(e);
this.EnableEventValidation = false;
}

Gebe ich dann in eine Textbox das ein <h1>***TEST***</h1> erscheint immer noch die Meldung:
Ein möglicherweise gefährlicher Request.Form-Wert wurde vom Client ...entdeckt.

Wie kann ich denn jetzt die EventValidation im Code bei .Net-Framework 3.5 abschalten?


Danke!
12.09.2011
MarcusS 207 1 5
MarcusS 207 1 5
3 Antworten
1
Kann es sein, dass Du RequestValidation und EventValidation verwechselst? Erstere schaltest Du z.B. so ab:

<%@ Page validateRequest="false" %>

oder durch Setzen der ValidateRequest-Eigenschaft der PageSection.
12.09.2011
Matthias Hlawatsch 13,2k 4 9
hm könnte sein :-)
kann ich das in der apsx.cs irgendwie pro Seite abschalten? Ich will es ja nicht für meine komplette Anwendung ausschalten sondern nur für ein einziges UI.Control.
MarcusS 12.09.2011
Pro Seite: ja - über die @Page-Direktive, wie angegeben. (Aus dem Code heraus sehe ich auf die Schnelle keine Möglichkeit.)

Pro Control: wohl eher nicht, fürchte ich.
Matthias Hlawatsch 12.09.2011
0
aber pro Seite scheint es erst ab .Net4.0 zu funktionieren. Ich verwende aber .Net 3.5
schade...
12.09.2011
MarcusS 207 1 5
Hm, dokumentiert ist es auch schon für .NET 3.5:
http://msdn.microsoft.com/en-us/library/ydy4x04a%28v=VS.90%29.aspx
Matthias Hlawatsch 12.09.2011
0
Hallo,

Du kannst z.B. mit MS Ajax auf den Fehler reagieren
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

function EndRequestHandler(sender, args)
{
if (args.get_error() != undefined && args.get_error().httpStatusCode == '500')
{
var errorMessage = args.get_error().message
args.set_errorHandled(true);
//ToDo: per javascipt den Inhalt Encoden
__doPostback('','')
}

}


Ähnliche Funktionen und Methoden sollte es auch mit jQuery geben, was ich bevorzugt in die Seite einbauen würde. Aber mit MS Ajax hatte ich etwas ähnliches schon mal umgesetzt.

Grundsätzlich kannst Du aber auch gleich in dem blur Event der Textbox reagieren und den Inhalt Encodieren, oder auch einen Custom Validator an die Textbox binden und dort den Text ersetzen.

Als dritte Option kann man natürlich auch den ValidateRequest Request auf der Seite abschalten. Dann solltest Du aber unbedingt mit soetwas wie antixss arbeiten. Alle Eingaben von einer Seite genau zu überprüfen ist aber - unabhängig davon - immer unbedingt Pflicht.

Gruß
12.09.2011
LutzJ 1,3k 1 8
Erst im Nachhinein zu encoden, wenn der Server sich beschwert, halte ich für gefährlich. Was, wenn die Request-Validation mal irgendwas gefährlich nicht anmeckert?

Dazu ist vielleicht auch diese Diskussion bei stackoverflow interessant:
http://stackoverflow.com/questions/1510903/is-it-necessary-to-htmlencode-textbox-values-if-asp-net-request-validation-is-en

Da stellt sich natürlich die Frage: warum bekommt Marcus den Fehler auch für eine Textbox? Die sollte laut diesem Thread eigentlich automatisch encoden.
Matthias Hlawatsch 12.09.2011
Das hatte ich dann auch angemerkt, dass man grundsätzlich die Eingaben überprüfen sollte, z.B. mit AnitXss (serverseitig). Und wenn man ein <h1> als Eingabe benötigt, dann gibt es nur den Weg ValidateRequest abzuschalten, oder aber vorher per Javascript etwas zu unternehmen. Natürlich könnte man den Inhalt auch erst an einen Webservice senden....
LutzJ 12.09.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH