Información general sobre la seguridad en formularios Windows Forms

Actualización: noviembre 2007

Antes del lanzamiento de .NET Framework, todo el código que se ejecutaba en el equipo de un usuario tenía los mismos derechos o permisos de acceso a los recursos que tenía un usuario del equipo. Por ejemplo, si el usuario tenía acceso al sistema de archivos, el código también tenía acceso al sistema de archivos, y lo mismo ocurría en el caso de una base de datos. Aunque estos derechos o permisos podrían ser aceptables para el código de ejecutables que el usuario haya instalado explícitamente en el equipo local, puede que no lo sean para código potencialmente malintencionado que proceda de Internet o de una Intranet local. Este código no debería poder tener acceso a los recursos del equipo del usuario sin permiso.

.NET Framework presenta una infraestructura denominada Seguridad de acceso a código, que permite diferenciar los permisos, o derechos, que tiene el código de los que tiene el usuario. De forma predeterminada, el código que procede de Internet y de la Intranet sólo se puede ejecutar en el modo que se conoce como de confianza parcial. La confianza parcial somete a una aplicación a una serie de restricciones: entre otras, una aplicación no puede tener acceso al disco duro local, ni ejecutar código no administrado. .NET Framework controla los recursos a los que tiene acceso el código en función de la identidad de dicho código, de dónde procede, si tiene Ensamblados con nombre seguro, si está firmado con un certificado, etc.

La tecnología de ClickOnce, que se usa para implementar aplicaciones de Windows Forms, facilita el desarrollo de aplicaciones que se ejecutan en confianza parcial, en plena confianza, o en confianza parcial con permisos elevados. ClickOnce dispone de funciones como la elevación de permisos y la implementación de aplicaciones de confianza para que la aplicación pueda solicitar permisos de plena confianza o de confianza elevada al usuario local de forma responsable.

Seguridad en .NET Framework

La seguridad de acceso del código permite que el código sea confiable con distintos grados, dependiendo de dónde se origina y otros aspectos de la identidad del código. Para obtener más información sobre las pruebas que utiliza Common Language Runtime para determinar la directiva de seguridad, vea Evidencia. Ayuda a proteger los sistemas informáticos frente a código malintencionado y a asegurar el código confiable para no poner en peligro la seguridad de manera intencionada o accidental. La seguridad de acceso a código también le ofrece un mayor control sobre las acciones que puede realizar la aplicación, porque sólo puede especificar los permisos necesarios para la aplicación. La seguridad de acceso a código afecta a todo el código administrado orientado a Common Language Runtime, incluso si dicho código no realiza ninguna comprobación de permisos de seguridad de acceso al código. Para obtener más información sobre la seguridad en .NET Framework, vea Conceptos clave de seguridad y Aspectos básicos de seguridad de acceso a código.

Si el usuario ejecuta un archivo ejecutable de un formulario Windows Forms directamente en un servidor Web o en un recurso compartido de archivos, el grado de confianza garantizado a la aplicación dependerá de dónde resida el código, y de cómo se inicie. Cuando se ejecuta una aplicación, se evalúa automáticamente y recibe un conjunto de permisos con nombre de Common Language Runtime. De manera predeterminada, el código del equipo local obtiene el conjunto de permisos Plena confianza, el código de la red local obtiene el conjunto de permisos Intranet local y el código de Internet obtiene el conjunto de permisos Internet.

Nota:

En el Service Pack 1 y Service Pack 2 de la versión 1.0 de .NET Framework, el grupo de código de la zona Internet recibe el conjunto de permisos Nada. En las demás versiones de .NET Framework, el grupo de código de la zona Internet obtiene el conjunto de permisos Internet.

Los permisos concedidos en cada uno de estos conjuntos de permisos se enumeran en el tema Directiva de seguridad predeterminada. Dependiendo de los permisos que reciba la aplicación, se ejecutará correctamente o generará una excepción de seguridad.

Muchas aplicaciones de Windows Forms se implementan utilizando ClickOnce. Las herramientas utilizadas para generar una implementación de ClickOnce tienen valores predeterminados de seguridad diferentes a los tratados anteriormente. Para obtener más información, vea la siguiente explicación.

Los permisos reales concedidos a la aplicación pueden ser diferentes de los valores predeterminados, puesto que la directiva de seguridad se puede modificar; esto significa que la aplicación puede tener permisos en un equipo y en otro no.

Desarrollar una aplicación de Windows Forms más segura

La seguridad es importante en todos los pasos del desarrollo de aplicaciones. Comience leyendo y siguiendo las instrucciones de codificación segura.

A continuación, decida si la aplicación se debe ejecutar en plena confianza o en confianza parcial. Si ejecuta la aplicación en plena confianza resulta más fácil tener acceso a los recursos del equipo local, pero expone la aplicación y sus usuarios a grandes riesgos de seguridad si no diseña y desarrolla la aplicación estrictamente de acuerdo al tema Instrucciones de codificación segura Si ejecuta la aplicación en confianza parcial resulta más fácil desarrollar una aplicación más segura y se reducen los riesgos, pero requiere mayor planificación en la implementación de ciertas funciones.

Si elige la confianza parcial (es decir, los conjuntos de permisos Internet o Intranet local), decide como desea que se comporte la aplicación en este entorno. Formularios Windows Forms proporciona maneras alternativas más seguras de implementar características cuando se esté en un entorno parcialmente confiable. Ciertas partes de la aplicación, como el acceso a datos, se pueden diseñar y escribir de manera diferente para entornos de confianza parcial y de plena confianza. Algunas funciones de formularios Windows Forms, como la configuración de la aplicación, se diseñan para que funcionen en confianza parcial. Para obtener más información, vea Introducción a la configuración de la aplicación.

Si la aplicación necesita más permisos de los que permite la confianza parcial, pero no desea ejecutar en plena confianza, puede ejecutar en confianza parcial, declarando sólo los permisos adicionales que necesite. Por ejemplo, si desea ejecutar en confianza parcial, pero debe conceder a la aplicación el acceso de sólo lectura a un directorio en el sistema de archivos del usuario, puede solicitar FileIOPermission sólo para dicho directorio. Si se utiliza correctamente, este enfoque puede aumentar la funcionalidad de la aplicación y reducir los riesgos de seguridad para sus usuarios.

Al desarrollar una aplicación que se va a ejecutar en confianza parcial, supervise qué permisos debe ejecutar la aplicación y qué permisos podría utilizar opcionalmente. Cuando se conocen todos los permisos, debe realizar una solicitud declarativa de permisos en el nivel de la aplicación. La solicitud de permisos informa en tiempo de ejecución a .NET Framework de los permisos que necesita la aplicación y de los que no desea específicamente. Para obtener más información sobre la solicitud de permisos, vea Solicitar permisos y Solicitudes de permisos.

Cuando solicite permisos opcionales, deberá controlar excepciones de seguridad que puede que se generen si la aplicación realiza una acción que requiere permisos que no tenga concedidos. Un correcto control de la excepción SecurityException garantizará que la aplicación continúe ejecutándose. La aplicación puede utilizar la excepción para determinar si se debería deshabilitar una característica para el usuario. Por ejemplo, una aplicación puede deshabilitar la opción de menú Guardar si no se han concedido los permisos de archivo necesarios.

A veces, es difícil saber si ha declarado todos los permisos adecuados. Por ejemplo, una llamada al método que parece inocua a simple vista, puede tener acceso al sistema de archivos en algún punto durante su ejecución. Si no implementa la aplicación con todos los permisos necesarios, puede que la prueba sea favorable al depurar la aplicación en el escritorio, pero que falle al implementarla. El SDK de .NET Framework 2.0 y Visual Studio 2005 contienen herramientas para calcular los permisos que necesita la aplicación: la herramienta de línea de comandos MT.exe y la función Calcular permisos de Visual Studio, respectivamente.

Los siguientes temas describen características de seguridad adicionales de formularios Windows Forms:

Tema

Descripción

Explica cómo tener acceso a archivos y datos en un entorno de confianza parcial.

Explica cómo tener acceso a características de impresión en un entorno de confianza parcial.

Explica cómo manipular ventanas, utilizar el Portapapeles y realizar llamadas a código no administrado en un entorno de confianza parcial.

Implementar una aplicación con los permisos adecuados

La forma más común de implementar una aplicación de Windows Forms en un equipo cliente es mediante ClickOnce, una tecnología de implementación que describe todos los componentes que necesita la aplicación para ejecutarse. ClickOnce usa archivos XML denominados manifiestos para describir los ensamblados y los archivos que componen la aplicación, y también los permisos que requiere.

ClickOnce tiene dos tecnologías para solicitar permisos elevados en un equipo cliente. Ambas tecnologías se basan en el uso de certificados Authenticode. Los certificados sirven para asegurar a sus usuarios que la aplicación procede de una fuente de confianza.

En la tabla siguiente se describen estas tecnologías.

Tecnología de permiso elevado

Descripción

Elevación de permisos

Muestra al usuario un cuadro de diálogo de seguridad la primera vez que se ejecuta la aplicación. El cuadro de diálogo Elevación de permisos informa al usuario sobre quién publicó la aplicación, para que pueda tomar una decisión con fundamento al concederle confianza adicional

Implementación de aplicaciones de confianza

Consiste en un administrador del sistema que realiza una instalación única del certificado Authenticode de un editor en un equipo cliente. Desde este momento, cualquier aplicación firmada con el certificado se considera de confianza, y se puede ejecutar con plena confianza en el equipo local sin preguntas adicionales.

La tecnología elegida dependerá de su entorno de implementación. Para obtener más información, vea Elegir una estrategia de implementación de ClickOnce.

De forma predeterminada, las aplicaciones de ClickOnce implementadas mediante Visual Studio o las herramientas del SDK de .NET Framework 2.0 (Mage.exe y MageUI.exe) se configuran para que se ejecuten en un equipo cliente que tiene Plena confianza. Si implementa la aplicación utilizando la confianza parcial o sólo algunos permisos adicionales, tendrá que cambiar este valor predeterminado. Puede hacerlo mediante Visual Studio o la herramienta del SDK de .NET Framework 2.0MageUI.exe, al configurar la implementación. Para obtener más información sobre cómo utilizar MageUI.exe, vea Tutorial: Implementar una aplicación ClickOnce desde la línea de comandos.

Para obtener más información sobre aspectos de seguridad de ClickOnce y sobre la Elevación de permisos, vea Implementación y seguridad con ClickOnce. Para obtener más información acerca de la implementación de aplicaciones de confianza, vea Información general sobre la implementación de aplicaciones de confianza.

Probar la aplicación

Si ha implementado la aplicación de Windows Forms mediante Visual Studio, puede activar la depuración en confianza parcial o un conjunto de permisos restringido desde el entorno de desarrollo.

Vea también

Conceptos

Conceptos básicos sobre la seguridad de acceso a código

Información general sobre la implementación de ClickOnce

Información general sobre la implementación de aplicaciones de confianza

Referencia

Herramienta de generación y edición de manifiestos (Mage.exe)

Herramienta de generación y edición de manifiestos, cliente gráfico (MageUI.exe)

Otros recursos

Seguridad en los formularios Windows Forms