ViewState e validazione eventi

di Cristian Civera, in .NET 2.0,

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.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese