Cifrado de la informacion del ViewState


Para reducir el riesgo que alguien intercepte la información almacenada en el ViewState, es una buena medida el encriptar (cifrar) dicha información.

Se puede hacer esto en ASP.NET 1.x a nivel de aplicación estableciéndolo en el web.config:

<configuration>
   <system.web>
      <machineKey validation="3DES" />
   </system.web>
</configuration> 

Nota: Para una introducción al ViewState con ASP.NET 1.x, leer: Introducción a ViewState de ASP.NET.

Pero el soporte para el encriptado se ha mejorado en ASP.NET 2.0, permitiendo incluso establecer el encriptado de la información del ViewState de manera individual por cada pagina, y a solicitud de un control de la misma. Para ello en ASP.NET 2.0 se ha introducido la propiedad ViewStateEncryptionMode para especificar cuando la información del ViewState debe ser encriptada.

Los valores aceptados de la propiedad ViewStateEncryptionMode son:

  • Always La información del ViewState siempre es encriptada. Si la aplicación maneja información sensible de manera constante seria conveniente utilizar este valor.
  • Auto La información es encriptada si un control lo solicita. Este es el valor por defecto de la propiedad.
  • Never La información nunca es encriptada, aún si un control lo solicita. Úselo bajo su propia responsabilidad…

Para establecer el valor a nivel de aplicación empleamos el atributo ViewStateEncryptionMode de la sección pages en el web.config:

<configuration>
   <system.web>
      <pages ViewStateEncryptionMode="Always" />
   </system.web>
</configuration>

O bien por medio del atributo homónimo de la directiva @Page, para establecer el valor en una página en particular:

<%@Page ViewStateEncryptionMode="Always" %>

También se puede establecer el valor de manera dinámica a través de la propiedad ViewStateEncryptionMode del objeto Page:

Page.ViewStateEncryptionMode = ViewStateEncryptionMode.Auto

Cabe señalar que el valor establecido de ésta forma sobre-escribe, es decir que remplaza, al valor establecido en el web.config.

Nota: La propiedad puede ser establecida antes o durante la fase de PreRender del ciclo de vida de la página, de lo contrario se lanza una excepción de tipo InvalidOperationException.

Así pues, utilizando el valor por defecto (Auto) de la propiedad ViewStateEncryptionMode, si se requiere que la información del ViewState sea encriptada, se debe llamar al método RegisterRequiresViewStateEncryption del objeto Page:

If (<condición>) Then
    Page.RegisterRequiresViewStateEncryption()
End If

Pero además, ASP.NET 2.0 introduce el soporte para el algoritmo AES, lo que podemos especificar en la sección machineKey del web.config para que sea utilizado en el encriptado del ViewState:

<configuration>
   <system.web>
      <machineKey validation="AES" />
   </system.web>
</configuration> 

Acerca de Willy Mejia

Developer, Techie, Human... http://about.me/willyxoft
Esta entrada fue publicada en .NET, ASP.NET, Seguridad. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s