ValidateRequest

di Cristian Civera, in .NET,

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();
}

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