Oggi nel forum di ASPItalia.com un utente aveva l'esigenza di validare i bytes inviati dal browser solo se l'utente che ha eseguito l'operazione è un admin o un utente normale. Questo per consentire a tag html o codice potenzialmente ritenuto pericoloso di essere inseriti solo se l'utente ha i privilegi necessari.
Quando la pagina viene parserizzata e poi generato il codice che la rappresenta se la validazione è attivata (a livello di .config o di pagina) viene aggiunta un'istruzione:
protected override void FrameworkInitialize()
{
this.Request.ValidateInput();
}
Il metodo ValidateInput imposta tre flags per indicare in fase di Get di controllare QueryString, Form e Cookies.
La soluzione da me proposta quindi, è quella di disabilitare il controllo nella direttiva Page e richiamare ValidateInput solo se l'utente non è admin.
Non va bene sovrascrivere FrameworkInitialize perché se usiamo il code-behind la pagina prodotta dal parser non richiama il metodo base e se usiamo il code-inside non si accorge che il metodo esiste già.
In alternativa si può usare DeterminePostBackMode- E' importante richiamare ValidateInput prima di aver usato HttpRequest.QueryString/Form/Cookies. Insomma, bastano queste 3 righe:
protected override NameValueCollection DeterminePostBackMode()
{
if (condizioneAdmin)
this.Request.ValidateInput();
return DeterminePostBackMode();
}
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- LINQ, lazy loading e architettura, l'11 marzo 2011 alle 18:42
- MetadataDiffViewer: aggiornato al .NET Framework 4.0, Silverlight 4.0 e Sharepoint 2010, il 7 gennaio 2010 alle 13:58
- .NET Framework 4.0 beta 1: Windows Communication Foundation, il 18 maggio 2009 alle 16:00
- Parallelizzare in Silverlight 2.0, il 21 aprile 2009 alle 00:25
- Silverlight: performance dell'isolated storage, il 16 aprile 2009 alle 17:38
- MetadataDiffViewer: differenze tra i framework, il 15 aprile 2009 alle 18:56