Protección de las aplicaciones ClickOnce

Las aplicaciones ClickOnce están sujetas a las restricciones en materia de seguridad de acceso del código de .NET Framework para ayudar a limitar el acceso del código a los recursos y operaciones protegidos. Por esta razón, es importante que comprenda las implicaciones de la seguridad de acceso del código para que pueda escribir las aplicaciones ClickOnce en consecuencia. Las aplicaciones pueden utilizar Plena confianza o zonas parciales, como las zonas de Internet o intranet, para limitar el acceso.

Además, ClickOnce utiliza certificados para comprobar la autenticidad del publicador de la aplicación y firmar los manifiestos de aplicación e implementación a fin de demostrar que los archivos no se han alterado. La firma es un paso opcional, que facilita la modificación de los archivos de la aplicación una vez que se han generado los manifiestos. Sin embargo, sin manifiestos firmados, es difícil garantizar que el instalador de la aplicación no ha sido manipulado a través de ataques de seguridad de tipo "Man in the middle". Por este motivo, le recomendamos que firme la aplicación y los manifiestos de implementación, lo que le ayudará a proteger las aplicaciones.

Zones

Las aplicaciones que se implementan mediante la tecnología ClickOnce se limitan a un conjunto de permisos y acciones definidos por la zona de seguridad. Las zonas de seguridad se definen en Internet Explorer y se basan en la ubicación de la aplicación. En la tabla siguiente se muestran los permisos predeterminados basados en la ubicación de la implementación:

Ubicación de implementación Zona de seguridad
Ejecutada desde el Web Zona de Internet
Instalada desde el Web Zona de Internet
Instalada desde un recurso compartido de archivos de red Zona de intranet local
Instalada desde un CD-ROM Plena confianza

Los permisos predeterminados se basan en la ubicación desde la cual fue implementada la versión original de la aplicación; las actualizaciones de la aplicación heredarán esos permisos. Si la aplicación se configura para que compruebe las actualizaciones desde una ubicación web o una ubicación de red y se encuentra disponible una versión más reciente, la instalación original puede recibir permisos para Internet o para la zona Intranet en lugar de permisos de plena confianza. Para evitar que el programa pida a los usuarios que concedan los permisos, el administrador del sistema puede especificar una directiva de implementación ClickOnce que defina un editor de aplicación concreto como origen de confianza. Para aquellos equipos en los que se implemente esta directiva, los permisos se concederán automáticamente y no se preguntará al usuario. Para obtener más información, consulta Trusted Application Deployment Overview. Para configurar la implementación de aplicaciones de confianza, el certificado puede instalarse en el equipo o en el nivel de empresa. Para obtener más información, consulte Cómo: agregar un publicador de confianza en un equipo cliente para aplicaciones ClickOnce.

Nota:

Esta característica no es compatible en ClickOnce para .NET Core y .NET 5 o posterior. Para obtener más información, consulte ClickOnce para .NET.

Directivas de seguridad de acceso del código

La configuración del elemento <trustInfo> Element del manifiesto de aplicación determina los permisos de una aplicación. Visual Studio genera automáticamente esta información según la configuración de la página de propiedades Seguridad del proyecto. A una aplicación ClickOnce solo se le conceden los permisos específicos que solicita. Por ejemplo, cuando el acceso a archivos requiere permisos de plena confianza, si la aplicación solicita permiso de acceso al archivo, sólo se le concederá permiso de acceso al archivo, pero no permisos de plena confianza. Al desarrollar la aplicación ClickOnce, debe asegurarse de solicitar solo los permisos específicos que la aplicación necesita. En la mayoría de los casos, puede usar zonas de Internet o intranet local para limitar la aplicación a confianza parcial. Para obtener más información, consulte Cómo: establecer una zona de seguridad para una aplicación ClickOnce. Si la aplicación requiere permisos personalizados, puede crear una zona personalizada. Para obtener más información, consulte Cómo: establecer permisos personalizados para una aplicación ClickOnce.

Nota

Esta característica no es compatible en ClickOnce para .NET Core y .NET 5 o posterior. Para obtener más información, consulte ClickOnce para .NET.

Incluso un permiso que no forma parte del conjunto de permisos predeterminado para la zona desde la que se implementa la aplicación hará que al usuario final se le solicite conceder el permiso en el momento de la instalación o actualización. Para evitar que el programa pida a los usuarios que concedan los permisos, el administrador del sistema puede especificar una directiva de implementación ClickOnce que defina un editor de aplicación concreto como origen de confianza. En aquellos equipos en los que se implemente esta directiva, los permisos se concederán automáticamente y no se preguntará al usuario.

Como desarrollador, es su responsabilidad asegurarse de que la aplicación se ejecute con los permisos adecuados. Si la aplicación solicita permisos fuera de una zona en tiempo de ejecución, es posible que se produzca una excepción de seguridad. Visual Studio permite depurar la aplicación dentro de la zona de seguridad de destino y proporciona ayuda para desarrollar aplicaciones seguras. Para más información, consulte Depuración de aplicaciones ClickOnce que usan System.Deployment.Application.

Para obtener más información sobre la seguridad de acceso del código y ClickOnce, vea Seguridad de acceso del código para aplicaciones ClickOnce.

Certificados de firma de código

Para publicar una aplicación mediante la implementación de ClickOnce, puede firmar la aplicación y los manifiestos de implementación de la aplicación con un par de clave pública y clave privada. Las herramientas para firmar un manifiesto están disponibles en la página Firma del Diseñador de proyectos. Para obtener más información, consulta Signing Page, Project Designer.

Una vez firmados los manifiestos, la información del publicador basada en la firma Authenticode aparecerá ante el usuario en el cuadro de diálogo de permisos, para mostrarle que la aplicación procede de un origen de confianza.

Para obtener más información sobre ClickOnce y los certificados, vea ClickOnce and Authenticode.

Autenticación basada en formularios de ASP.NET

Si desea controlar las implementaciones a las que puede obtener acceso cada usuario, no debe permitir accesos anónimos a las aplicaciones ClickOnce implementadas en un servidor web. En lugar de ello, podría permitir que los usuarios tuvieran acceso a las implementaciones instaladas mediante una identidad de usuario (a través de la autenticación de Windows).

Sin embargo,ClickOnce no admite la autenticación basada en formularios de ASP.NET porque usa cookies persistentes; estas representan un riesgo de seguridad porque residen en la memoria caché de Internet Explorer y podrían prestarse a intrusiones. Por consiguiente, si está implementando aplicaciones ClickOnce, no se admitirá ningún escenario de implementación que no presente autenticación de Windows.

Pasar argumentos

Hay una consideración de seguridad adicional que debe tener en cuenta si necesita pasar argumentos a una aplicación ClickOnce. ClickOnce permite a los desarrolladores proporcionar una cadena de consulta a las aplicaciones implementadas a través de Internet. La cadena de consulta toma la forma de una serie de pares de nombre y valor al final de la dirección URL que se utiliza para iniciar la aplicación:

http://servername.adatum.com/WindowsApp1.application?username=joeuser

Los argumentos de la cadena de consulta están deshabilitados de forma predeterminada. Para habilitarlos, debe establecer el atributo trustUrlParameters en el manifiesto de implementación de la aplicación. Este valor se puede establecer en Visual Studio y en MageUI.exe. Para obtener instrucciones detalladas sobre cómo habilitar la aprobación de cadenas de consulta, vea Recuperación de información de una cadena de consulta en una aplicación ClickOnce en línea.

No debe pasar nunca argumentos recuperados a través de una cadena de consulta a una base de datos o a la línea de comandos sin antes comprobar los argumentos para garantizar que sean seguros. No son seguros los argumentos que incluyen caracteres de escape de línea de comandos o base de datos que pueden permitir a un usuario malintencionado manipular la aplicación mediante la ejecución de comandos arbitrarios.

Nota

Los argumentos de la cadena de consulta constituyen la única forma de pasar argumentos a una aplicación ClickOnce cuando se inicia. No se pueden pasar argumentos a una aplicación ClickOnce desde la línea de comandos.

Implementar ensamblados protegidos

Visual Studio incluye PreEmptive Protection - Dotfuscator Community de forma gratuita, que puede usar para proteger las aplicaciones ClickOnce mediante ofuscación de código y medidas de protección activas. Para obtener más información, vea la sección de ClickOnce de la guía del usuario de Dotfuscator Community.