ViewState e validazione eventi

Vi assicuro che non vivo solo di ViewState anche se mi ritrovo di nuovo a parlarne :-)

Ci sono altre novità nella versione 2 di cui non avevo ancora letto niente. Vi sarete magari trovati di fronte ad un nuovo campo nasconto della form di nome __EVENTVALIDATION. Si può controllare questo campo tramite la proprietà Page.EnableEventValidation e fa sì che venga controllato se eventuali postbacks sono validi.

Per esempio, se abbiamo una tabella dodata per ogni riga di un pulsante di cancellazione spesso si sfrutta il CommandName o il CommandArgument per identificare il record. Ma cosa succede se qualche malintenzionato fa il POST di una form con un __EVENTTARGET modificato? Potrebbe cancellare un record non di sua competenza. Certo come ci insegna Riccardo, uno strato business sottostante dovrebbe già prevedere questo tipo di situazione e saremmo quindi al riparo.
Ma questa architettura non sempre viene sempre utilizzata o scritta nel modo corretto, perciò ogni controllo di ASP.NET 2 richiede questo controllo. Lo possiamo fare anche dai nostri controlli custom richiamando GetPostBackEventReference con l'argomento registerForEventValidation a true o manualmente con ClientScriptManager.RegisterForEventValidation e validando il postback con ClientScriptManager.ValidateEvent. Se il controllo non passa verrà generata un'eccezione ArgumentException: Invalid postback or callback argument.

Ma non finisce qui. La classe Page dispone di una proprietà ViewStateEncryptionMode, di default impostata su Auto. Ciò significa che normalmente il viewstate è codificato BASE64 soltamente, ma qualora un controllo lo richieda con RegisterRequiresViewStateEncryption il ViewState viene criptato e non ci sarà quindi verso di decifrarlo con i normali decoder.
Chi richiede la criptazione in modo automatico in fase di Init sono i controlli: DataList, DetailsView, FormView, GridView.

Per le modalità di criptazione guardare la sezione di web.config system.web/machineKey. Di default usa Auto (Rijndael) con chiave autogenerata isolata per applicazione.

Nella stessa categoria

Commenti

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

© 1998-2008 - Ricciolo.NET - Il blog di Cristian "Ricciolo" Civera

TagCloud
BLOG INFO
  • Post: 178
  • Commenti: 80
  • TrackBacks: 39
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom OPML

MVP
CATEGORIE
I PIÙ LETTI DEL MESE
IN EVIDENZA