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.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Silverlight e versioni CLR, il 28 agosto 2007 alle 13:49
- Intercettare il reciclo di un'applicazione ASP.NET, il 25 settembre 2006 alle 22:42
- User e custom controls, WebParts, il 15 giugno 2006 alle 20:52
- Capitolo 10 tutto su ObjectDataSource, il 6 giugno 2006 alle 23:03
- ASP.NET 2.0 per tutti: capitolo 9 pronto, il 28 maggio 2006 alle 22:55
- Gestione dei Threads in ASP.NET, il 19 aprile 2006 alle 21:36