Seguridad (WPF)
Al desarrollar aplicaciones Windows Presentation Foundation (WPF) independientes y hospedadas en el explorador, debe tener en cuenta el modelo de seguridad. Las aplicaciones WPF independientes se ejecutan con permisos no restringidos (conjunto de permisos CASFullTrust), tanto si se implementan con Windows Installer (.msi), XCopy o ClickOnce. No se admite la implementación de aplicaciones de WPF independientes y de confianza parcial con ClickOnce. Sin embargo, una aplicación host de plena confianza puede crear un AppDomain de confianza parcial con el modelo de complemento de .NET Framework. Para obtener más información, consulte Información general sobre los complementos de WPF.
Las aplicaciones WPF hospedadas en el explorador se hospedan en Windows Internet Explorer o Firefox, y pueden ser aplicaciones de explorador XAML (XBAPs) o documentos de lenguaje XAML dinámico. Para obtener más información, consulte Información general sobre las aplicaciones de explorador XAML de WPF.
Advertencia
Las aplicaciones XBAP requieren exploradores heredados, como Internet Explorer y versiones anteriores de Firefox. Estos exploradores anteriores no suelen ser compatibles con Windows 10 y Windows 11. Los exploradores modernos ya no admiten la tecnología necesaria para las aplicaciones XBAP debido a riesgos de seguridad. Los complementos que habilitan XBAPs ya no se admiten. Para más información, consulte Preguntas más frecuentes acerca de las aplicaciones hospedadas en explorador (XBAP) de WPF.
De forma predeterminada, las aplicaciones WPF hospedadas en explorador se ejecutan dentro de un espacio aislado de seguridad de confianza parcial que está limitado al conjunto predeterminado de permisos de la zona CASInternet. Esto aísla de forma eficaz las aplicaciones WPF hospedadas en explorador del equipo cliente del mismo modo que se suelen aislar las aplicaciones web típicas. XBAP puede elevar los privilegios hasta Plena confianza en función de la zona de seguridad de la dirección URL de implementación y la configuración de seguridad del cliente. Para obtener más información, vea Seguridad de confianza parcial de WPF.
En este tema se estudia el modelo de seguridad para aplicaciones Windows Presentation Foundation (WPF) independientes y hospedadas en el explorador.
Este tema contiene las siguientes secciones:
Deshabilitar ensamblados APTCA para aplicaciones cliente de confianza parcial
Comportamiento de espacio aislado para archivos XAML dinámicos
Recursos para desarrollar aplicaciones de WPF que promueven la seguridad
Navegación segura
Para XBAP, WPF distingue entre dos tipos de navegación: aplicación y explorador.
Navegación de aplicación es la navegación entre los elementos de contenido dentro de una aplicación hospedada en un explorador. Navegación de explorador es la navegación que cambia el contenido y la dirección URL del explorador. La relación entre la navegación de aplicación (normalmente XAML) y la navegación de explorador (normalmente HTML) se muestra en la siguiente ilustración:
El tipo de contenido que se considera seguro para que XBAP navegue hacia él se determina principalmente en función de la navegación que se usa: navegación de aplicación o de explorador.
Seguridad de navegación de aplicación
La navegación de aplicación se considera segura si se puede identificar con un paquete URI, que admite cuatro tipos de contenido:
Tipo de contenido | Descripción | Ejemplo de URI |
---|---|---|
Recurso | Archivos que se agregan a un proyecto con un tipo de compilación de Recurso. | pack://application:,,,/MyResourceFile.xaml |
Contenido | Archivos que se agregan a un proyecto con un tipo de compilación de Contenido. | pack://application:,,,/MyContentFile.xaml |
Sitio de origen | Archivos que se agregan a un proyecto con un tipo de compilación de Ninguno. | pack://siteoforigin:,,,/MySiteOfOriginFile.xaml |
Código de aplicación | Recursos XAML que tienen un código compilado subyacente. O bien Archivos XAML que se agregan a un proyecto con un tipo de compilación de Página. |
pack://application:,,,/MyResourceFile .xaml |
Nota
Para obtener más información sobre los archivos de datos de aplicaciones y paquetes URI, consulte Archivos de recursos, contenido y datos de aplicaciones de WPF.
El usuario puede navegar por los archivos de estos tipos de contenido, aunque también se pueden navegar mediante programación:
Navegación de usuario. El usuario navega al hacer clic en un elemento Hyperlink.
Navegación mediante programación. La aplicación navega sin implicar al usuario, por ejemplo, estableciendo la propiedad NavigationWindow.Source.
Seguridad de navegación de explorador
La navegación de explorador se considera segura solo en las siguientes condiciones:
Navegación de usuario. El usuario navega al hacer clic en un elemento Hyperlink dentro de un NavigationWindow principal, y no en un Frame anidado.
Zona. El contenido al que se navega se encuentra en Internet o en la intranet local.
Protocolo. El protocolo que se usa puede ser http, https, file, o mailto.
Si un XBAP intenta navegar a contenido de un modo que no cumpla estas condiciones, se inicia un SecurityException.
Configuración de seguridad de software de exploración web
La configuración de seguridad en el equipo determina el acceso que se concede a cualquier software de navegación web. El software de navegación web incluye cualquier aplicación o componente que use las API WinINet o UrlMon, incluidos Internet Explorer y PresentationHost.exe.
Internet Explorer proporciona un mecanismo por el que se puede configurar la funcionalidad que se puede ejecutar en o desde Internet Explorer, que incluye lo siguiente:
Componentes dependientes de .NET Framework
Controles y complementos de ActiveX
Descargas
Scripting
Autenticación de usuario
La colección de funciones que se pueden proteger de este modo se configura en una base por zona para las zonas de Internet, Intranet, Sitios de confianza y Sitios restringidos. En los siguientes pasos se describe cómo establecer la configuración de seguridad:
Abra el Panel de control.
Haga clic en Red e Internet y, a continuación, haga clic en Opciones de Internet.
Aparecerá el cuadro de diálogo Opciones de Internet.
En la pestaña Seguridad, seleccione la zona para la que se establecerá la configuración de seguridad.
Haga clic en el botón Nivel personalizado.
Aparecerá el cuadro de diálogo Configuración de seguridad y podrá establecer la configuración de seguridad para la zona seleccionada.
Nota
También puede abrir el cuadro de diálogo Opciones de Internet desde Internet Explorer. Haga clic en Herramientas y, a continuación, en Opciones de Internet.
A partir de Windows Internet Explorer 7 se incluyen las siguientes opciones de seguridad específicas para .NET Framework:
XAML dinámico. Controla si Internet Explorer puede navegar a archivos XAML dinámico. (Opciones Habilitar, Deshabilitar y Preguntar).
Aplicaciones de explorador XAML. Controla si Internet Explorer puede navegar a, y ejecutar XBAP. (Opciones Habilitar, Deshabilitar y Preguntar).
De forma predeterminada, esta configuración está habilitada para las zonas de Internet, Intranet local y Sitios de confianza, y deshabilitada para la zona de Sitios restringidos.
Configuración del Registro de WPF relacionada con la seguridad
Además de la configuración de seguridad disponible mediante Opciones de Internet, los valores del Registro siguientes están disponibles para bloquear selectivamente varias características de WPF de seguridad. Los valores se definen con la siguiente clave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features
En la tabla siguiente se muestran los valores que se pueden establecer.
Nombre del valor | Tipo de valor | Datos del valor |
---|---|---|
XBAPDisallow | REG_DWORD | 1 para no permitir; 0 para permitir. |
LooseXamlDisallow | REG_DWORD | 1 para no permitir; 0 para permitir. |
WebBrowserDisallow | REG_DWORD | 1 para no permitir; 0 para permitir. |
MediaAudioDisallow | REG_DWORD | 1 para no permitir; 0 para permitir. |
MediaImageDisallow | REG_DWORD | 1 para no permitir; 0 para permitir. |
MediaVideoDisallow | REG_DWORD | 1 para no permitir; 0 para permitir. |
ScriptInteropDisallow | REG_DWORD | 1 para no permitir; 0 para permitir. |
Control WebBrowser y controles de características
El control WebBrowser de WPF se puede usar para hospedar contenido web. El control WebBrowser de WPF contiene el control ActiveX WebBrowser subyacente. WPF proporciona compatibilidad para proteger la aplicación cuando usa el control WebBrowser de WPF para hospedar contenido web que no es de confianza. Sin embargo, las aplicaciones deben aplicar algunas características de seguridad directamente con el control WebBrowser. Para obtener más información sobre el control ActiveX WebBrowser, consulte Información general y tutoriales del control WebBrowser.
Nota
Esta sección también se aplica al control Frame, ya que usa el WebBrowser para navegar a contenido HTML.
Si el control WebBrowser de WPF se usa para hospedar contenido web que no es de confianza, la aplicación debe usar un objeto AppDomain de confianza parcial para ayudar a aislar el código de la aplicación de código de script HTML potencialmente malintencionado. Esto es especialmente cierto si su aplicación interactúa con scripts hospedados mediante el método InvokeScript y la propiedad ObjectForScripting. Para obtener más información, consulte Información general sobre los complementos de WPF.
Si la aplicación usa el control WebBrowser de WPF, otro modo de aumentar la seguridad y reducir los ataques es habilitar los controles de característica de Internet Explorer. Los controles de característica son agregaciones a Internet Explorer que permiten que los administradores y desarrolladores configuren las características de Internet Explorer y las aplicaciones que hospedan el control ActiveX WebBrowser, que encapsula el control WebBrowser de WPF. Los controles de característica se pueden configurar mediante la función CoInternetSetFeatureEnabled o cambiando valores en el registro. Para obtener más información acerca de los controles de característica, consulte Introducción a los controles de característica y Controles de característica de Internet.
Si está desarrollando una aplicación independiente de WPF que usa el control WebBrowser de WPF, WPF habilita automáticamente los siguientes controles de característica para la aplicación.
Control de característica |
---|
FEATURE_MIME_HANDLING |
FEATURE_MIME_SNIFFING |
FEATURE_OBJECT_CACHING |
FEATURE_SAFE_BINDTOOBJECT |
FEATURE_WINDOW_RESTRICTIONS |
FEATURE_ZONE_ELEVATION |
FEATURE_RESTRICT_FILEDOWNLOAD |
FEATURE_RESTRICT_ACTIVEXINSTALL |
FEATURE_ADDON_MANAGEMENT |
FEATURE_HTTP_USERNAME_PASSWORD_DISABLE |
FEATURE_SECURITYBAND |
FEATURE_UNC_SAVEDFILECHECK |
FEATURE_VALIDATE_NAVIGATE_URL |
FEATURE_DISABLE_TELNET_PROTOCOL |
FEATURE_WEBOC_POPUPMANAGEMENT |
FEATURE_DISABLE_LEGACY_COMPRESSION |
FEATURE_SSLUX |
Puesto que estos controles de característica están habilitados incondicionalmente, podrían afectar a una aplicación de plena confianza. En este caso, si no hay ningún riesgo de seguridad para la aplicación específica y el contenido que se hospeda, se puede deshabilitar el control de característica correspondiente.
Los controles de característica se aplican en el proceso de creación de instancias del objeto ActiveX WebBrowser. Por lo tanto, si está creando una aplicación independiente que puede navegar a contenido que no es de confianza, debe considerar seriamente la posibilidad de habilitar controles de característica adicionales.
Nota
Esta recomendación se basa en las recomendaciones generales para la seguridad de host MSHTML y SHDOCVW. Para obtener más información, consulte Preguntas más frecuentes sobre la seguridad de host MSHTML: Parte I de II y Preguntas más frecuentes sobre la seguridad de host MSHTML: Parte II de II.
Para el archivo ejecutable, considere la posibilidad de habilitar los siguientes controles de característica. Para ello, establezca el valor del Registro en 1.
Control de característica |
---|
FEATURE_ACTIVEX_REPURPOSEDETECTION |
FEATURE_BLOCK_LMZ_IMG |
FEATURE_BLOCK_LMZ_OBJECT |
FEATURE_BLOCK_LMZ_SCRIPT |
FEATURE_RESTRICT_RES_TO_LMZ |
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7 |
FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG |
FEATURE_LOCALMACHINE_LOCKDOWN |
FEATURE_FORCE_ADDR_AND_STATUS |
FEATURE_RESTRICTED_ZONE_WHEN_FILE_NOT_FOUND |
Para el archivo ejecutable, considere la posibilidad de deshabilitar el siguiente control de característica. Para ello, establezca el valor del Registro en 0.
Control de característica |
---|
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT |
Si ejecuta una aplicación de navegador XAML de confianza parcial (XBAP) que incluye un control WebBrowser de WPF en Windows Internet Explorer, WPF hospeda el control ActiveX WebBrowser en el espacio de direcciones del proceso de Internet Explorer. Puesto que el control ActiveX WebBrowser se hospeda en el proceso Internet Explorer, todos los controles de característica para Internet Explorer también se habilitan para el control ActiveX WebBrowser.
Los objetos XBAP que se ejecutan en Internet Explorer también obtienen un nivel adicional de seguridad en comparación con las aplicaciones independientes normales. Esta seguridad adicional se debe a que Internet Explorer y, por lo tanto, el control ActiveX WebBrowser, se ejecutan en modo protegido de forma predeterminada en Windows Vista y Windows 7. Para obtener más información sobre el modo protegido, consulte Comprender y trabajar en modo protegido de Internet Explorer.
Nota
Si intenta ejecutar un XBAP que incluye un control WebBrowser de WPF en Firefox mientras esté en la zona Internet, se iniciará un SecurityException. Esto se debe a la directiva de seguridad de WPF.
Deshabilitar ensamblados APTCA para aplicaciones cliente de confianza parcial
Cuando se instalan ensamblados administrados en la caché general de ensamblado (GAC), se convierten en ensamblados de plena confianza porque el usuario debe proporcionar un permiso explícito para instalarlos. Dado que son de plena confianza, solo las aplicaciones cliente administradas de plena confianza pueden usarlos. Para permitir que los usen aplicaciones de confianza parcial, debe marcarlos con el AllowPartiallyTrustedCallersAttribute (APTCA). Solo los ensamblados probados como seguros para la ejecución en confianza parcial se deben marcar con este atributo.
Sin embargo, es posible que un ensamblado APTCA muestre un problema de seguridad después de instalarlo en el GAC. Cuando se detecta un error de seguridad, los publicadores de ensamblados pueden producir una actualización de seguridad para corregir el problema en las instalaciones existentes y proteger las instalaciones que se produzcan después de detectar el problema. Una opción para la actualización es desinstalar el ensamblado, aunque eso podría causar que otras aplicaciones cliente de plena confianza que usan el ensamblado dejen de funcionar correctamente.
WPF proporciona un mecanismo por el que se puede deshabilitar un ensamblado APTCA para XBAP de confianza parcial sin desinstalar el ensamblado APTCA.
Para deshabilitar un ensamblado APTCA, tiene que crear una clave del Registro especial:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>
Se muestra un ejemplo a continuación:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0
Esta clave establece una entrada para el ensamblado APTCA. También debe crear un valor en esta clave que habilite o deshabilite el ensamblado. Los siguientes son los detalles del valor:
Nombre del valor: APTCA_FLAG.
Tipo de valor: REG_DWORD.
Datos del valor: 1 para deshabilitar; 0 para habilitar.
Si un ensamblado se debe deshabilitar para las aplicaciones cliente de confianza parcial, puede escribir una actualización que cree la clave y el valor del Registro.
Nota
Los ensamblados principales de .NET Framework no se ven afectados si se deshabilitan de este modo porque son necesarios para que se ejecuten las aplicaciones administradas. La compatibilidad para deshabilitar ensamblados APTCA está destinada principalmente a aplicaciones de terceros.
Comportamiento de espacio aislado para archivos XAML dinámicos
Los archivos XAML dinámicos son archivos XAML solo de marcación que no dependen de ningún código subyacente, controlador de eventos ni ensamblado específico de la aplicación. Al navegar a archivos XAML dinámicos directamente desde el navegador, estos se cargan en un espacio aislado de seguridad basado en el conjunto de permisos predeterminado de la zona de Internet.
Sin embargo, el comportamiento de seguridad es distinto cuando se navega a archivos XAML dinámicos desde un NavigationWindow o Frame en una aplicación independiente.
En ambos casos el archivo XAML dinámico al que se navega hereda los permisos de su aplicación host. Sin embargo, este comportamiento puede no ser deseable desde una perspectiva de seguridad, en especial si el archivo XAML dinámico ha sido generado por una entidad desconocida o que no sea de confianza. Este tipo de contenido se conoce como contenido externo, y, tanto Frame, como NavigationWindow se pueden configurar para aislarlo cuando se navegue a él. El aislamiento se consigue estableciendo la propiedad SandboxExternalContent en verdadero, como se muestra en los siguientes ejemplos para Frame y NavigationWindow:
<Frame
Source="ExternalContentPage.xaml"
SandboxExternalContent="True">
</Frame>
<!-- Sandboxing external content using NavigationWindow-->
<NavigationWindow
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Source="ExternalContentPage.xaml"
SandboxExternalContent="True">
</NavigationWindow>
Con esta configuración, el contenido externo se carga en un proceso independiente del proceso que hospeda la aplicación. Este proceso está restringido al conjunto de permisos predeterminado de la zona de Internet y lo aísla de forma eficaz desde la aplicación host y el equipo cliente.
Nota
A pesar de que la navegación a archivos XAML dinámicos desde un objeto NavigationWindow o Frame en una aplicación independiente se implementa en función de la infraestructura de hospedaje del navegador de WPF, que implica al proceso PresentationHost, el nivel de seguridad es ligeramente inferior que cuando el contenido se carga directamente en Internet Explorer de Windows Vista y Windows 7 (que seguiría siendo mediante PresentationHost). Esto se debe a que una aplicación de WPF independiente que usa un navegador web no proporciona la característica de seguridad adicional de modo protegido de Internet Explorer.
Recursos para desarrollar aplicaciones de WPF que promueven la seguridad
Los siguientes son algunos recursos adicionales para ayudar a desarrollar aplicaciones WPF que promueven la seguridad:
Área | Resource |
---|---|
Código administrado | Modelos y prácticas Guía de seguridad para aplicaciones |
CAS | Seguridad de acceso del código |
ClickOnce | Seguridad e implementación ClickOnce |
WPF | Seguridad de confianza parcial de WPF |
Vea también
.NET Desktop feedback