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

O ASP.NET codifica num campo "hidden" chamado __VIEWSTATE determinada informação que necessita de ser preservada entre postbacks.

Esta informação é encriptada (HAS), a key usada na sua encriptação é guardada no servidor e o HAS encriptado é colocado no viewstate. Apesar da integridade da protecção do ViewState estar assegurada, e ninguém poder adulterar essa informação, ainda assim é possível para o atacante enviar ViewState válido. Se isso acontecer, estaremos perante uma falha de segurança.

A solução apresenta pelo Rui Quintino na sua sessão "DEV013 - 0wn3d: Hacking ainda mais fácil em AJAX Web Sites" do TechDays 2007 foi incluir no ViewStateUserKey algo que fosse único em cada request, a Session.SessionID.

Desta forma, para o atacante, seria impossível recriar um ViewState igual e/ou válido em virtude da SessionID ser sempre diferente.

 1: protected override void OnInit(EventArgs e)
 2: { 
 3:  ViewStateUserKey = Session.SessionID; 
 4:  
 5:  base.OnInit(e);
 6: }
 
"The SessionID property is used to uniquely identify a browser with session data on the server. The SessionID value is randomly generated by ASP.NET and stored in a non-expiring session cookie in the browser. The SessionID value is then sent in a cookie with each request to the ASP.NET application."
 
Apesar da SessionID ser uma boa solução, não é a única, o importante é encontrar formas de individualizar as páginas.

 1: public class ViewStateUserKeyBasePage : System.Web.UI.Page
 2: {
 3:  protected override void OnInit(EventArgs e)
 4:  {
 5:  if (Request.IsAuthenticated)
 6:  {
 7:  ViewStateUserKey = Context.User.Identity.Name;
 8:  }
 9:  
 10:  base.OnInit(e);
 11:  }
 12: }
 
Neste exemplo, criei uma classe "ViewStateUserKeyBasePage" que será utilizada (herdada) em todas as páginas aspx.
 
O Context.User.Identity.Name é uma solução possível e cada caso é um caso :o)
 
No próximo post apresentarei uma outra solução “Remover o ViewState da página”!

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

posted on Friday, April 20, 2007 1:47 PM
Comments
No comments posted yet
Title  
Name  
Url
Box Code
Protected by FormShield
Comments