Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Personas que lo han encontrado útil: 0 de 1 - Valorar este tema

Cifrado de ViewState en ASP.NET 2.0

Diciembre de 2005

Publicado: 27 de Marzo de 2006

Por Matt Gibbs
Development Lead-Web Platform & Tools

Resumen: para reducir la probabilidad de que alguien intercepte la información almacenada en ViewState, es conveniente cifrar ViewState. Aunque ya era posible hacerlo en las versiones anteriores de ASP.NET, las posibilidades de cifrado se han ampliado en ASP.NET 2.0 y ahora es posible realizar este cifrado para cada página. (3 páginas impresas.)

En esta página

Contenido Contenido
Acerca del autor Acerca del autor

Contenido

En la versión anterior de ASP.NET, un programador de páginas podía activar o desactivar el cifrado para toda la aplicación mediante una opción de configuración. Cuando la validación se establecía en 3DES, ViewState se cifraba antes de procesarse en la página.

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

En ASP.NET 2.0 se han ampliado las posibilidades de control y uso del cifrado. La configuración de cifrado ahora puede controlarse de manera independiente para cada página. Además, los controles de la página pueden solicitar que se utilice el cifrado para ViewState, pero incluso esta solicitud puede omitirse mediante la configuración de la página. La enumeración ViewStateEncryptionMode tiene tres valores: Auto, Always y Never. El valor predeterminado es Auto.

  • ViewStateEncryptionMode.Auto

    En este modo, ASP.NET cifrará ViewState para una página si cualquier control de la página lo solicita. Observe que esto significa que se cifra todo ViewState, no sólo para el control que lo ha solicitado. Gran parte del costo del rendimiento asociado al cifrado se encuentra en la sobrecarga. Por tanto, cifrar todo ViewState es más rápido que realizar diferentes operaciones de cifrado si más de un control realiza la solicitud.

  • ViewStateEncryptionMode.Never

    Tal como es de esperar, en este modo ASP.NET no cifrará ViewState, incluso si la aplicación tiene el cifrado configurado y los controles de la página lo solicitan. Si sabe que no es necesario cifrar ninguno de los datos que figuran en la página, puede resultar seguro establecer el modo en Never. Sin embargo, en este punto es difícil que la documentación acerca de un control revele lo que se está guardando en ViewState, por lo que deberá tener cuidado si hay alguna probabilidad de que puedan quedar expuestos datos confidenciales.

  • ViewStateEncryptionMode.Always

    En este modo, ASP.NET no espera a que un control de la página solicite el cifrado. ViewState siempre se cifra. Cuando se trabaja con datos confidenciales, es recomendable utilizar el cifrado.

El modo es una propiedad de la página, pero se puede establecer utilizando una directiva de la página o en el archivo web.config de la aplicación.

<%@Page ViewStateEncryptionMode="Always" %>

O

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

Para alguien que escribe un control personalizado es fácil solicitar el cifrado de ViewState. El nombre del método de Page al que hay que llamar es RegisterRequiresViewStateEncryption.

protected override void OnInit(EventArgs e) {
    base.OnInit(e);
    if(Page != null) {
        Page.RegisterRequiresViewStateEncryption();
    }
}

Los desarrolladores de controles deben tener en cuenta la sobrecarga y las posibles implicaciones de utilizar el cifrado y no deben optar por solicitar el cifrado a la ligera. Observe que hablamos de solicitudes, aunque el nombre de la API suena más bien a mandato. Si los desarrolladores de controles saben de alguna manera que es necesario cifrar los datos almacenados en ViewState, pueden agregar código para generar una excepción en caso de que el desarrollador de la página desactive el cifrado.

protected override void SaveViewState() {
    if(Page != null) {
        if(Page.ViewStateEncryptionMode == ViewStateEncryptionMode.Never) {
            throw new Exception(“ViewStateEncryptionMode.Never not allowed 
			when using the SensitiveDataList control.");
        }
    }
}  

Acerca del autor

Matt Gibbs trabaja como jefe de ingenieros de diseño de software en el equipo de ASP.NET de Microsoft, donde lleva trabajando en las tecnologías de desarrollo Web desde 1997. Ha colaborado con otros autores en varios libros sobre ASP y ASP.NET.

¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.