rbfigueira
Tudo sobre a plataforma .net em Português ;)

No meu post anterior falei como proteger o ViewState usando o ViewStateUserKey. Sendo uma excelente solução, na minha opinião existe uma melhor usando a framework 2.0 :P

Nós podemos remover o ViewState da página e guarda-lo no Session state ou mesmo num ficheiro externo (em termos de performance não sei se será a melhor opção).

Isto dá-nos alguns benefícios adicionais, tais como reduzir o tamanho das páginas e a possibilidade de colocar "timeout" no ViewState minimizando possíveis ataques.

O ASP.NET 2.0 introduz o conceito de "Page State Persister" que é uma classe responsável pela persistência do ViewState. Por defeito as páginas utilizam a persistência chamada HiddenFieldPageStatePersister que utiliza o campo "hidden" chamado __VIEWSTATE (ViewState).

Caso desconheçam existe "out-of-the-box" a persistência chamada SessionPageStatePersister que tal como o nome indica, guarda o ViewState na session !! Yeap, is true :)

Para tal basta dar instruções á página para utilizar este tipo de persistência fazendo um override ao PageStatePersister na classe da página!!

   1:  protected override PageStatePersister PageStatePersister
   2:  {
   3:      get
   4:       {
   5:           return new SessionPageStatePersister(this);         
   6:       }           
   7:  }
 
 
Poderão fazer isto directamente na página ou então criar uma classe base "Page".
Digam lá que não é uma excelente solução de segurança :)

[Cross-Posted de http://rbfigueira.net]

posted on Friday, April 20, 2007 2:42 PM
Comments
  • # re: Protegendo o ViewState – Parte II
    Elson - São Paulo - Brasil
    Posted @ 4/20/2007 4:04 PM
    Olá!

    Cara, tenho lá minhas dúvidas. Seguro pode realmente ser, mas e a performance? Não podemos esquecer desta.

    Será que é possível armazenar num banco de dados? :\

    Abraço,
    Elson
  • # re: Protegendo o ViewState – Parte II
    rbfigueira
    Posted @ 4/20/2007 4:52 PM
    Oi Elson,

    É claro que podes gravar em uma base de dados. Fazes o override ao Page.PageStatePersister ou crias uma "adapter".

    http://msdn2.microsoft.com/en-us/library/system.web.ui.pagestatepersister.aspx

    Mas olha que não é assim tão simples pois tens que ter em conta a session ID, timestamp e o nome da página.
    Terás que criar um mecanismo para limpar as entradas expiradas do view state, sessões abandonadas, etc!
    Imagina ires á para A, depois vai para a B. Fazes "Back" no browser e tens tudo estragado!

    Tudo isto sem ainda poderares a performance.... só testando ://
Title  
Name  
Url
Box Code
Protected by FormShield
Comments