Compartir a través de


Seguridad (WPF)

Al desarrollar aplicaciones independientes y hospedadas en explorador de Windows Presentation Foundation (WPF), debe tener en cuenta el modelo de seguridad. Las aplicaciones independientes de WPF se ejecutan con permisos sin restricciones (CASconjunto de permisos FullTrust), tanto si se implementan con Windows Installer (.msi), XCopy o ClickOnce. No se admite la implementación de aplicaciones WPF independientes de confianza parcial con ClickOnce. Sin embargo, una aplicación host de plena confianza puede crear un AppDomain de confianza parcial mediante el modelo de complementos de .NET Framework. Para obtener más información, vea WPF Add-Ins Visión general.

Las aplicaciones hospedadas en el explorador WPF se hospedan en Windows Internet Explorer o Firefox, y pueden ser aplicaciones de explorador XAML (XBAPs) o documentos de lenguaje de marcado extensible de aplicaciones (XAML) flexible Para obtener más información, vea Información general sobre las aplicaciones de explorador XAML de WPF.

Advertencia

Los XBAP requieren que los exploradores heredados funcionen, como Internet Explorer y versiones anteriores de Firefox. Normalmente, estos exploradores más antiguos no son 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 obtener más información, vea preguntas más frecuentes sobre las aplicaciones hospedadas en explorador (XBAP) de WPF.

Las aplicaciones WPF hospedadas en el navegador se ejecutan, por defecto, dentro de un entorno de seguridad de confianza parcial, que está limitado al conjunto de permisos predeterminado de CAS de la zona de Internet. Esto aísla eficazmente las aplicaciones hospedadas por el explorador WPF del equipo cliente de la misma manera que esperaría que las aplicaciones web típicas se aislaran. Un XBAP puede elevar 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 describe el modelo de seguridad para aplicaciones independientes y hospedadas en explorador de Windows Presentation Foundation (WPF).

Este tema contiene las secciones siguientes:

Navegación segura

Para XBAPs, WPF distingue dos tipos de navegación: aplicación y explorador.

La navegación dentro de la aplicación es la navegación entre elementos de contenido dentro de una aplicación alojada por un navegador. navegación del explorador es la navegación que cambia el contenido y la dirección URL de ubicación de un propio explorador. La relación entre la navegación de la aplicación (normalmente XAML) y la navegación del explorador (normalmente HTML) se muestra en la ilustración siguiente:

Relación entre la navegación de la aplicación y la navegación del explorador.

El tipo de contenido que se considera seguro para que un XBAP navegue a se determina principalmente por si se usa la navegación de la aplicación o la navegación del explorador.

Seguridad de navegación de aplicaciones

La navegación de la aplicación se considera segura si se puede identificar con un URI de paquete, que admite cuatro tipos de contenido:

Tipo de contenido Descripción Ejemplo de URI
Recurso Archivos que se añaden a un proyecto con un tipo de compilación Recurso. pack://application:,,,/MyResourceFile.xaml
Contenido Archivos que se añaden 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 None. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Código de aplicación Recursos XAML que tienen un código subyacente compilado.

-o-

Archivos XAML que se agregan a un proyecto con un tipo de compilación de Page.
pack://application:,,,/MyResourceFile.xaml

Nota

Para obtener más información sobre los archivos de datos de la aplicación y los URI de paquete, consulte Recurso de Aplicación de WPF, Contenido y Archivos de Datos.

Los archivos de estos tipos de contenido se pueden navegar por el usuario o mediante programación:

  • Navegación de usuario. El usuario navega haciendo clic en un elemento Hyperlink.

  • Navegación Programática. La aplicación navega sin implicar al usuario, por ejemplo, estableciendo la propiedad NavigationWindow.Source.

Seguridad de navegación del explorador

La navegación del explorador solo se considera segura en las siguientes condiciones:

  • Navegación de usuario. El usuario navega haciendo clic en un elemento Hyperlink que está dentro del NavigationWindowprincipal , no en un Frameanidado .

  • Zona. El contenido al que se navega se encuentra en Internet o en la intranet local.

  • protocolo. El protocolo que se usa es http, https, archivoo mailto.

Si un XBAP intenta navegar al contenido de una forma que no cumpla con estas condiciones, se lanza un SecurityException.

Configuración de seguridad de software de exploración web

La configuración de seguridad del equipo determina el acceso al que se concede cualquier software de exploración web. El software de exploración web incluye cualquier aplicación o componente que use la de WinINet o URLMon API, incluidos Internet Explorer y PresentationHost.exe.

Internet Explorer proporciona un mecanismo mediante el cual puede configurar la funcionalidad que se puede ejecutar por o desde Internet Explorer, incluyendo lo siguiente:

  • Componentes dependientes de .NET Framework

  • Controles y complementos ActiveX

  • Descargas

  • Scripting

  • Autenticación de usuario

La colección de funcionalidades que se pueden proteger de esta manera se configura por zona para las zonas de Internet, Intranet, Sitios de Confianzay Sitios Restringidos. En los pasos siguientes se describe cómo configurar las opciones de seguridad:

  1. Abra Panel de control.

  2. Haga clic en red e Internet y, a continuación, haga clic en Opciones de Internet.

    Aparece el cuadro de diálogo Opciones de Internet.

  3. En la pestaña Seguridad, seleccione la zona para la que configurar las opciones de seguridad.

  4. Haga clic en el botón nivel personalizado.

    Aparece el cuadro de diálogo Configuración de seguridad y puede configurar las opciones de seguridad de la zona seleccionada.

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

Nota

También puede acceder al cuadro de diálogo Opciones de Internet desde Internet Explorer. Haga clic en Herramientas y, a continuación, haga clic en Opciones de Internet.

A partir de Windows Internet Explorer 7, se incluyen las siguientes opciones de seguridad específicas para .NET Framework:

  • XAML suelto Controla si Internet Explorer puede navegar a archivos XAML sueltos. (Opciones: Habilitar, Deshabilitar y Preguntar).

  • aplicaciones de explorador XAML. Controla si Internet Explorer puede navegar y ejecutar XBAP. (Opciones: Habilitar, Deshabilitar y Preguntar).

De forma predeterminada, esta configuración está habilitada para las zonas de Internet, intranet localy sitios de confianza, y deshabilitada para la zona de sitios restringidos .

Además de la configuración de seguridad disponible a través de las opciones de Internet, los siguientes valores del Registro están disponibles para bloquear de forma selectiva una serie de características de WPF sensibles a la seguridad. Los valores se definen bajo la clave siguiente:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features

En la tabla siguiente se enumeran los valores que se pueden establecer.

Nombre del valor Tipo de valor Datos valiosos
XBAPDisallow REG_DWORD 1 para no permitir; 0 para permitir.
LooseXamlDisallow REG_DWORD 1 para no permitir; 0 para permitir.
DeshabilitarNavegadorWeb REG_DWORD 1 para no permitir; 0 para permitir.
MediaAudioDisallow REG_DWORD 1 para no permitir; 0 para permitir.
DesactivarImagenMedios 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.

el Control WebBrowser y los Controles de Funciones

El control WebBrowser WPF se puede usar para hospedar contenido web. El control WPF WebBrowser envuelve el control ActiveX subyacente de WebBrowser. WPF proporciona cierta compatibilidad para proteger la aplicación cuando se usa el control de WebBrowser WPF para hospedar contenido web que no es de confianza. Sin embargo, las aplicaciones deben aplicar directamente algunas características de seguridad mediante el control WebBrowser. Para obtener más información sobre el control ActiveX de WebBrowser, consulte Información general del control WebBrowser y Tutoriales.

Nota

Esta sección también se aplica al control Frame, ya que usa el WebBrowser para navegar al contenido HTML.

Si el control de WebBrowser WPF se usa para hospedar contenido web que no es de confianza, la aplicación debe usar un AppDomain de confianza parcial para ayudar a aislar el código de la aplicación del código de script HTML potencialmente malintencionado. Esto es especialmente cierto si la aplicación interactúa con el script hospedado mediante el método InvokeScript y la propiedad ObjectForScripting. Para obtener más información, vea WPF Add-Ins Información general.

Si la aplicación usa el control de WebBrowser WPF, otra manera de aumentar la seguridad y mitigar los ataques es habilitar los controles de características de Internet Explorer. Los controles de funcionalidad son adiciones a Internet Explorer que permiten a los administradores y desarrolladores configurar funcionalidades de Internet Explorer y de las aplicaciones que hospedan el control ActiveX WebBrowser, que el control WPF WebBrowser encapsula. Los controles de características se pueden configurar mediante la función CoInternetSetFeatureEnabled o cambiando los valores del Registro. Para obtener más información sobre los controles de características, vea Introducción a los controles de características y Controles de características de Internet.

Si está desarrollando una aplicación WPF independiente que usa el control de WebBrowser WPF, WPF habilita automáticamente los siguientes controles de características para la aplicación.

Control de características
FUNCIÓN_MANEJO_MIME
FUNCIÓN_DETECCIÓN_MIME
CARACTERÍSTICA_ALMACENAMIENTO_EN_CACHÉ_DE_OBJETOS
FEATURE_SAFE_BINDTOOBJECT
RESTRICCIONES_DE_VENTANA_DE_CARACTERÍSTICA
ELEVACIÓN_ZONA_DE_CARACTERÍSTICA
CARACTERÍSTICA_RESTRINGIR_DESCARGA_ARCHIVOS
FEATURE_RESTRICT_ACTIVEXINSTALL
FEATURE_ADDON_MANAGEMENT
FUNCIÓN_HTTP_NOMBRE_USUARIO_CONTRASEÑA_DESACTIVAR
FEATURE_SECURITYBAND
FEATURE_UNC_SAVEDFILECHECK
CARACTERÍSTICA_VALIDAR_NAVEGAR_URL
Desactivación de la funcionalidad del protocolo Telnet (FEATURE_DISABLE_TELNET_PROTOCOL)
FEATURE_WEBOC_POPUPMANAGEMENT
FUNCIÓN_DESACTIVAR_COMPRESIÓN_OBSOLETA
FEATURE_SSLUX

Dado que estos controles de características están habilitados incondicionalmente, una aplicación de plena confianza podría verse afectada por ellos. En este caso, si no hay ningún riesgo de seguridad para la aplicación específica y el contenido que hospeda, se puede deshabilitar el control de características correspondiente.

Los controles de características son aplicados por el proceso que instancia el objeto ActiveX de WebBrowser. Por lo tanto, si va a crear una aplicación independiente que pueda navegar a contenido que no es de confianza, considere seriamente la posibilidad de habilitar controles de características adicionales.

Nota

Esta recomendación se basa en recomendaciones generales para la seguridad del host MSHTML y SHDOCVW. Para obtener más información, vea FAQ sobre la seguridad del host MSHTML: Parte I de II y FAQ sobre la seguridad del host MSHTML: Parte II de II.

Para su ejecutable, considere activar los siguientes controles de funciones estableciendo el valor del Registro en 1.

Control de características
FUNCIÓN_ACTIVEX_DETECCIÓN_REDIRECCIONAMIENTO
FEATURE_BLOCK_LMZ_IMG
FEATURE_BLOCK_LMZ_OBJECT
FEATURE_BLOCK_LMZ_SCRIPT
FEATURE_RESTRICT_RES_TO_LMZ
FUNCIÓN_RESTRINGIR_ACERCA_DE_PROTOCOLO_IE7
FUNCIÓN_MOSTRAR_DIÁLOGO_ADVERTENCIA_PROT_APLICACIÓN
FEATURE_LOCALMACHINE_LOCKDOWN
FEATURE_FORCE_ADDR_AND_STATUS
CARACTERÍSTICA_ZONA_RESTRINGIDA_CUANDO_ARCHIVO_NO_ENCONTRADO

Para su ejecutable, considere deshabilitar el siguiente control de funciones estableciendo el valor del Registro en 0.

Control de características
CARACTERÍSTICA_HABILITAR_SCRIPT_PEGAR_ACCIÓN_URL_SI_SE_PIDE

Si ejecutas una aplicación de explorador XAML de confianza parcial (XBAP) que incluye un control de WebBrowser WPF en Windows Internet Explorer, WPF hospeda el control ActiveX WebBrowser en el espacio de direcciones del proceso de Internet Explorer. Dado que el control ActiveX de WebBrowser se hospeda en el proceso de Internet Explorer, todos los controles de características de Internet Explorer también están habilitados para el control ActiveX de WebBrowser.

Los XBAPs 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 Internet Explorer y, por tanto, al control ActiveX WebBrowser, se ejecuta en modo protegido de forma predeterminada en Windows Vista y Windows 7. Para obtener más información sobre el modo protegido, vea Understanding and Working in Protected Mode Internet Explorer.

Nota

Si intentas ejecutar un XBAP que incluya un control WPF de WebBrowser en Firefox, en la zona de Internet se lanzará un SecurityException. Esto se debe a la directiva de seguridad de WPF.

Desactivación de ensamblados APTCA para aplicaciones de cliente con confianza parcial

Cuando los ensamblados administrados se instalan en la caché global de ensamblados (GAC), se convierten en de plena confianza porque el usuario debe proporcionar permiso explícito para instalarlos. Dado que son de plena confianza, solo las aplicaciones cliente administradas de plena confianza pueden usarlas. Para permitir que las aplicaciones de confianza parcial las usen, deben marcarse con el AllowPartiallyTrustedCallersAttribute (APTCA). Solo los ensamblados que se han probado para que sean seguros para su ejecución en confianza parcial deben marcarse con este atributo.

Sin embargo, es posible que un ensamblado APTCA muestre un error de seguridad después de instalarse en la GAC . Una vez detectado un error de seguridad, los publicadores de ensamblados pueden generar una actualización de seguridad para corregir el problema en las instalaciones existentes y para protegerse frente a las instalaciones que pueden producirse después de que se detecte el problema. Una opción para la actualización es desinstalar el ensamblado, aunque esto puede interrumpir otras aplicaciones cliente de plena confianza que usan el ensamblado.

WPF proporciona un mecanismo por el que se puede deshabilitar un ensamblado APTCA para XBAPs de confianza parcial sin desinstalar el ensamblado APTCA.

Para deshabilitar un ensamblado APTCA, debe crear una clave especial del Registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>

A continuación se muestra un ejemplo:

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 tiene que crear un valor en esta clave que habilite o deshabilite el ensamblaje. A continuación se muestran los detalles del valor:

  • Nombre del valor: APTCA_FLAG.

  • Tipo de valor: REG_DWORD.

  • Datos de valor: 1 para deshabilitar; 0 habilitar.

Si un ensamblado tiene que deshabilitarse para aplicaciones cliente de confianza parcial, puede escribir una actualización que cree la clave y el valor del Registro.

Nota

Los ensamblados de .NET Framework principales no se ven afectados al deshabilitarlos de esta manera porque son necesarios para que las aplicaciones administradas se ejecuten. El soporte para deshabilitar ensamblados APTCA se destina principalmente a aplicaciones de terceros.

Comportamiento del espacio aislado para archivos XAML sueltos

Los archivos XAML sueltos son archivos XAML de solo marcado que no dependen de ningún código subyacente, controlador de eventos o ensamblado específico de la aplicación. Cuando se accede a los archivos XAML sueltos directamente desde el navegador, se cargan dentro de un entorno de seguridad basado en el conjunto de permisos predeterminado de la zona de Internet.

Sin embargo, el comportamiento de seguridad es diferente cuando se accede a archivos XAML sueltos desde un NavigationWindow o Frame en una aplicación independiente.

En ambos casos, el archivo XAML suelto al que se navega hereda los permisos de su aplicación anfitriona. Sin embargo, este comportamiento puede no ser deseable desde una perspectiva de seguridad, especialmente si un archivo XAML flexible se generó mediante una entidad que no es de confianza o desconocida. Este tipo de contenido se conoce como contenido externo, y tanto Frame como NavigationWindow se pueden configurar para aislarlo cuando se accede a él. El aislamiento se logra estableciendo la propiedad SandboxExternalContent en true, como se muestra en los ejemplos siguientes 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 cargará en un proceso independiente del proceso que hospeda la aplicación. Este proceso está restringido al conjunto de permisos de zona de Internet predeterminado, lo que lo aísla eficazmente de la aplicación de hospedaje y del equipo cliente.

Nota

Aunque la navegación a archivos XAML sueltos desde un NavigationWindow o Frame en una aplicación independiente se implementa en función de la infraestructura de hospedaje del explorador WPF, que implica el proceso PresentationHost, el nivel de seguridad es ligeramente menor que cuando el contenido se carga directamente en Internet Explorer en Windows Vista y Windows 7 (que seguiría siendo a través de PresentationHost). Esto se debe a que una aplicación WPF independiente que usa un explorador web no proporciona la característica de seguridad del modo protegido adicional de Internet Explorer.

Recursos para desarrollar aplicaciones WPF que promueven la seguridad

A continuación se muestran algunos recursos adicionales para ayudar a desarrollar aplicaciones WPF que promueven la seguridad:

Área Recurso
Código administrado Guía de seguridad de patrones y prácticas de para aplicaciones
CAS Seguridad de acceso al código
ClickOnce Seguridad y despliegue de ClickOnce
WPF seguridad de confianza parcial de WPF

Consulte también