23 messaggi dal 28 novembre 2005
Giorno everybody,

4 o 5 volte al giorno un server web mi spedisce il seguente messaggio di errore sulla mia e-mail:
System.Web.HttpUnhandledException: Exception of type
'System.Web.HttpUnhandledException' was thrown. --->
System.ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the
ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.........

Siccome le pagine su cui avviene questa eccezione sono dei wizard, volevo trovare un modo per capire su quale textbox è avvenuto l'errore in modo da avvisare l'utente che non deve mettere certe cose (a dire la verità non conosco tutti i caratteri vietati ma solo < e >) in quella textbox.
Il problema è che non mi è chiaro dove posso intercettare questo tipo di errore e come faccio a determinare quale textbox è la responsabile.
Sapete darmi qualche consiglio?

Grazie
3.121 messaggi dal 29 ottobre 2001
Contributi | Blog
Siccome le pagine su cui avviene questa eccezione sono dei wizard, volevo trovare un modo per capire su quale textbox è avvenuto l'errore in modo da avvisare l'utente che non deve mettere certe cose (a dire la verità non conosco tutti i caratteri vietati ma solo < e >) in quella textbox. Il problema è che non mi è chiaro dove posso intercettare questo tipo di errore e come faccio a determinare quale textbox è la responsabile. Sapete darmi qualche consiglio?

Grazie

Hai due possibilità. La più semplice ma pericolosa è disabilitare quel controllo direttamente nel web.config con l'accortezza, ricevute le informazioni dai textbox sul server, di filtrare tutto ciò che può essere pericoloso (tag vari in html).

Seconda possibilità è filtrare direttamente sul client i varatteri pericolosi. Questo lo puoi fare in Javascript al momento dell'invio delle informazioni. Guarda la funzione "escape" di javascript.

Ciao
23 messaggi dal 28 novembre 2005
Ciao Andrea,

grazie per la risposta.

Hai due possibilità. La più semplice ma pericolosa è disabilitare quel controllo direttamente nel web.config con l'accortezza, ricevute le informazioni dai textbox sul server, di filtrare tutto ciò che può essere pericoloso (tag vari in html).

In pratica questa prima soluzione consiste nel porre ValidateRequest = false nel web config oppure solo nella direttiva page delle pagine che mi servono. In questo caso la mia domanda è: posso scrivere sul database il contenuto di una textbox non validata semplicemente passando come parametro della insert o dell'update Server.HtmlEncode(txtProva.text) ?
Se così facessi corro dei rischi di cross site scripting una volta che quel contenuto così salvato viene visualizzato su un'altra pagina tramite un semplice
literal1.text= CellaDiPrimaUpdetataConHtmlEncode ?

In caso di tua risposta negativa (cioè non basta HtmlEncode) che controlli devo fare esattamente?

Seconda possibilità è filtrare direttamente sul client i varatteri pericolosi. Questo lo puoi fare in Javascript al momento dell'invio delle informazioni. Guarda la funzione "escape" di javascript.

Questa possibilità è già più difficile per me perché:
conosco pochissimo il javascript;
credo che salti in tutti quei casi in cui il client ha il javascript disabilitato.


La pagina di cui sto parlando è un wizard con un sacco di textbox che ogni utente può compilare liberamente scrivendo ogni genere di strafalcione. Per questo motivo volevo mantenere il ValidateRequest = True però speravo che si potesse intercettare l'evento dell'errore riuscendo a capire quale delle tante textbox lo aveva causato in modo tale che io possa far vedere la stessa pagina all'utente con l'indicazione in rosso delle textbox in cui ha inserito valori non consentiti dal validateRequest.
3.121 messaggi dal 29 ottobre 2001
Contributi | Blog
"assandri" <assandri> ha scritto nel messaggio news:257770@...
In pratica questa prima soluzione consiste nel porre ValidateRequest = false nel web config oppure solo nella direttiva page delle pagine che mi servono. In questo caso la mia domanda è: posso scrivere sul database il contenuto di una textbox non validata semplicemente passando come parametro della insert o dell'update Server.HtmlEncode(txtProva.text) ? Se così facessi corro dei rischi di cross site scripting una volta che quel
contenuto così salvato viene visualizzato su un'altra pagina tramite un semplice
literal1.text= CellaDiPrimaUpdetataConHtmlEncode ?

Teoricamente non rischi nulla, perché il testo sarebbe visualizzato senza essere interpretato. Se poi il testo da visualizzare lo metti tra i tag <pre></pre> corri ancora meno rischi.


In caso di tua risposta negativa (cioè non basta HtmlEncode) che controlli devo fare esattamente?

Il pericolo può derivare dall'inserimento da parte dell'utente di codice javascript. Ma con l'htmlencode questo non succede visto che viene neutralizzata qualsiasi possibilità di eseguire codice sul client.
Questa possibilità è già più difficile per me perché: conosco pochissimo il javascript;
credo che salti in tutti quei casi in cui il client ha il javascript disabilitato.

Naturalmente erano due tecniche da utilizzare contemporaneamente
La pagina di cui sto parlando è un wizard con un sacco di textbox che ogni utente può compilare liberamente scrivendo ogni genere di strafalcione. Per
questo motivo volevo mantenere il ValidateRequest = True però speravo che si potesse intercettare l'evento dell'errore riuscendo a capire quale delle tante textbox lo aveva causato in modo tale che io possa far vedere la stessa pagina all'utente con l'indicazione in rosso delle textbox in cui ha inserito valori non consentiti dal validateRequest.

Personalmente avevo affrontato questo problema un po' di tempo fa. Forse per mancanza di tempo, o per pigrizia, non avevo approfondito la gestione di quell'errore preferendo un controllo al momento dell'inserimento e impostando a false la proprietà validateRequest

Ciao
23 messaggi dal 28 novembre 2005
Grazie Andrea,

sei stato molto chiaro.
2 messaggi dal 28 aprile 2005
Ciao, ho lo stesso problema, ho settato il ValidateRequest="false" sulla pagina in questione, con ie 7 ho risolto il problema, la stessa pagina con firefox invece continua a darmi errore!
Ne sapete qualcosa!
Grazie!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.