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:

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:

Relación entre la navegación en la aplicación y la navegación en el explorador

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:

  1. Abra el Panel de control.

  2. 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.

  3. En la pestaña Seguridad, seleccione la zona para la que se establecerá la configuración de seguridad.

  4. 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.

    Captura de pantalla que muestra el cuadro de diálogo Configuración de seguridad.

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.

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