Seguridad (WPF)

Al desarrollar aplicaciones de Windows Presentation Foundation (WPF) independientes y hospedadas en explorador, debe considerar el modelo de seguridad. Las aplicaciones de WPF independientes se ejecutan con permisos no restringidos (conjunto de permisos FullTrust), si se implementaron con Windows Installer (.msi), XCopy o ClickOnce. No se admite la implementación de confianza parcial de aplicaciones WPF independientes 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 Información general sobre los complementos de WPF.

Las aplicaciones de WPF hospedadas en explorador se hospedan en Windows Internet Explorer o Firefox y pueden ser XAML browser applications (XBAPs) o documentos de Extensible Application Markup Language (XAML) independientes. Para obtener más información, vea Información general sobre las aplicaciones de explorador XAML de WPF.

De manera predeterminada, las aplicaciones de WPF hospedadas en explorador se ejecutan dentro de un recinto de seguridad de confianza parcial, que se limita al conjunto de permisos de zona Internet de CAS predeterminado. Con ello, las aplicaciones de WPF hospedadas en explorador se aíslan de manera eficaz del equipo cliente, del mismo modo que cabría esperar que se aíslen las aplicaciones web típicas. Un XBAP puede elevar los privilegios hasta Plena confianza dependiendo 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 de Windows Presentation Foundation (WPF) independientes y hospedadas por explorador.

Este tema contiene las siguientes secciones:

  • Navegación segura

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

  • Controles de características y control WebBrowser

  • Deshabilitar los ensamblados APTCA para las aplicaciones cliente de confianza parcial

  • Comportamiento en espacio aislado de archivos XAML independientes

  • Recursos para desarrollar aplicaciones WPF que promueven la seguridad

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

La navegación de aplicación es el desplazamiento por los elementos de contenido dentro de una aplicación hospedada en un explorador. La navegación de explorador es el desplazamiento que cambia el contenido y dirección URL de un 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 siguiente ilustración:

Diagrama de navegación

El tipo de contenido que se considera seguro para que una XBAP pueda navegar a él se determina principalmente en función de si se usa la navegación de aplicación o de explorador.

Seguridad de la navegación de aplicación

La navegación de aplicación se considera segura si se puede identificar mediante un pack 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

Content

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 de XAML que tienen 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

NotaNota

Para obtener más información sobre los archivos de datos de aplicación y los pack URIs, consulte Archivos de recursos, contenido y datos de aplicaciones de WPF.

A los archivos de estos tipos de contenido puede navegar el usuario o mediante programación:

  • Navegación por parte del usuario. El usuario navega haciendo clic en un elemento Hyperlink.

  • Navegación mediante programación. La aplicación navega sin comprometer al usuario, por ejemplo, estableciendo la propiedad NavigationWindow.Source.

Seguridad de la navegación de explorador

La navegación de explorador únicamente se considera segura en las condiciones siguientes:

  • Navegación por parte del usuario. El usuario navega haciendo clic en un elemento Hyperlink que está dentro del NavigationWindow principal, 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 es http, https, file o mailto.

Si una XBAP intenta navegar hasta el contenido de una manera que no cumple estas condiciones, se produce una excepción SecurityException.

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

La configuración de seguridad de su equipo determina el acceso que se permite a cualquier software de exploración web. El software de exploración web incluye cualquier aplicación o componente que use WinINet o UrlMon, incluidos Internet Explorer y PresentationHost.exe.

Internet Explorer proporciona un mecanismo que permite configurar las funciones que se pueden ejecutar desde Internet Explorer o por él, lo que incluye:

  • Componentes que dependen de .NET Framework

  • Controles ActiveX y complementos

  • Descargas

  • Scripting

  • Autenticación de usuario

La colección de funciones que se pueden proteger de esta manera se configura individualmente para cada una de las zonas, a saber, Internet, Intranet, Sitios de confianza y Sitios restringidos. Los siguientes pasos describen cómo configurar la configuración de seguridad:

  1. Abra el Panel de control.

  2. Haga clic en Red e Internet y, a continuación, 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 configura la configuración de seguridad.

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

    Se abrirá el cuadro de diálogo Configuración de seguridad, donde puede configurar los valores de seguridad de la zona seleccionada.

    Cuadro de diálogo Configuración de seguridad

NotaNota

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

A partir de Windows Internet Explorer 7, la siguiente configuración de seguridad está incluida específicamente para .NET Framework:

  • XAML dinámico. Controla si Internet Explorer puede navegar hasta archivos de XAML dinámico y ejecutarlos (opciones: Habilitar, Deshabilitar y Pedir datos).

  • Aplicaciones XAML del explorador Controla si Internet Explorer puede navegar hasta XBAPs y ejecutarlas (opciones: Habilitar, Deshabilitar y Pedir datos).

De manera predeterminada, todos estos valores están habilitados para las zonas Internet, Intranet local y Sitios de confianza, y deshabilitados para la zona Sitios restringidos.

Valores del Registro de WPF relacionados con la seguridad

Además de la configuración de seguridad disponible a través de Opciones de Internet, los siguientes valores del Registro están disponibles para bloquear selectivamente varias características de WPF que afectan a la seguridad. Los valores se definen bajo la siguiente clave:

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

La siguiente tabla contiene 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.

Controles de características y control WebBrowser

El control de WPF WebBrowser se puede utilizar para hospedar el contenido web. El control de WPF WebBrowser ajusta el control ActiveX de WebBrowser subyacente. WPF proporciona alguna compatibilidad para proteger la aplicación cuando se usa el control de WPF WebBrowser para hospedar contenido web que no es de confianza. Sin embargo, algunas características de seguridad deben aplicarse directamente por las aplicaciones mediante el control WebBrowser. Para obtener más información sobre el control ActiveX de WebBrowser, vea Información general y tutoriales para WebBrowser.

NotaNota

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

Si el control de WPF WebBrowser se utiliza para hospedar contenido web que no es de confianza, la aplicación debería utilizar AppDomain de confianza parcial para ayudar a aislar el código de aplicación del código de script HTML potencialmente malintencionado. Esto es especialmente cierto si la aplicación está interactuando con el script hospedado utilizando el método InvokeScript y la propiedad ObjectForScripting. Para obtener más información, vea Información general sobre los complementos de WPF.

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

Si está desarrollando una aplicación WPF independiente que utiliza el control de WPF WebBrowser, 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 dañar una aplicación de plena confianza. En este caso, si no hay riesgo para la seguridad de la aplicación concreta y el contenido que hospeda, el control de característica correspondiente puede deshabilitarse.

El proceso que crea instancias del objeto ActiveX de WebBrowser aplica los controles de característica. Por consiguiente, si está creando una aplicación independiente que puede navegar hasta contenido que no es de confianza, debe considerar seriamente habilitar controles de característica adicionales.

NotaNota

Esta recomendación está basada en recomendaciones generales para seguridad host MSHTML y SHDOCVW.Para obtener más información, vea The MSHTML Host Security FAQ: Part I of II y The MSHTML Host Security FAQ: Part II of II.

Para una aplicación ejecutable, considere habilitar los siguientes controles de característica estableciendo 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 una aplicación ejecutable, considere deshabilitar el siguiente control de característica estableciendo el valor del Registro en 0.

Control de característica

FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

Si ejecuta una XAML browser application (XBAP) de confianza parcial que incluye un control de WPF WebBrowser en Windows Internet Explorer, WPF hospeda el control ActiveX de WebBrowser en el espacio de direcciones del proceso de Internet Explorer. Puesto que el control ActiveX de WebBrowser se hospeda en el proceso de Internet Explorer, todos los controles de característica para Internet Explorer también están habilitados para el control ActiveX de WebBrowser.

XBAP que se ejecutan en Internet Explorer también obtienen un nivel adicional de seguridad comparado a las aplicaciones independientes normales. Esta seguridad adicional es porque Internet Explorer y, por consiguiente el control ActiveX de WebBrowser, se ejecuta de forma predeterminada en modo protegido en Windows Vista y Windows 7. Para obtener más información sobre el modo protegido, vea Comprender y trabajar en modo protegido en Internet Explorer.

NotaNota

Si intenta ejecutar un XBAP que incluye un control de WPF WebBrowser en Firefox, mientras está en la zona de Internet, se producirá una SecurityException.Esto es debido a la directiva de seguridad de WPF.

Deshabilitar los ensamblados APTCA para las aplicaciones cliente de confianza parcial

Cuando se instalan ensamblados administrados en global assembly cache (GAC), se vuelven de plena confianza porque el usuario debe proporcionar permiso explícito para instalarlos. Dado que son de plena confianza, únicamente las aplicaciones cliente administradas de plena confianza pueden utilizarlos. Para permitir que las aplicaciones de confianza parcial los utilicen, se deben marcar con AllowPartiallyTrustedCallersAttribute (APTCA). Únicamente los ensamblados que han demostrado ser seguros para su ejecución en confianza parcial se deben marcar con este atributo.

Sin embargo, es posible que un ensamblado APTCA presente un problema de seguridad después de instalarlo en GAC. Cuando se descubre un problema de seguridad, los publicadores de ensamblados pueden compilar una actualización de seguridad para corregir el problema en las instalaciones existentes, así como para proteger contra las instalaciones que se produzcan después de detectar el problema. Una opción para esta actualización es desinstalar el ensamblado, aunque ello constituya una interrupción para otras aplicaciones cliente de plena confianza que utilizan el ensamblado.

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

Para deshabilitar un ensamblado de APTCA, tiene que crear una clave del Registro especial:

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 de APTCA. También tiene que crear un valor en esta clave que habilite o deshabilite el ensamblado. A continuación se muestran 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 tiene que deshabilitarse para las aplicaciones cliente de confianza parcial, puede escribir una actualización que crear la clave y el valor del Registro.

NotaNota

Al deshabilitar los ensamblados básicos de .NET Framework de este modo, éstos no se ven afectados, puesto que son necesarios para que se ejecuten las aplicaciones administradas.La compatibilidad para deshabilitar los ensamblados APTCA se destina principalmente a aplicaciones de terceros.

Comportamiento en espacio aislado de archivos XAML independientes

Los archivos XAML independientes son archivos XAML solo de marcado que no dependen de código subyacente, controlador de eventos o ensamblado específico de aplicación. Cuando se navega a archivos independientes de XAML directamente desde el explorador, se cargan en un recinto de seguridad basado en el conjunto de permisos de zona de Internet predeterminado.

Sin embargo, el comportamiento de seguridad es diferente cuando se navega hasta los archivos de XAML dinámico desde NavigationWindow o desde Frame en una aplicación independiente.

En ambos casos, el archivo de 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 de XAML dinámico lo ha generado una entidad desconocida o que no es de confianza. Este tipo de contenido se denomina contenido externo; tanto Frame como NavigationWindow se pueden configurar para aislarlo cuando se navega hasta é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="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</NavigationWindow>

Con este valor, el contenido externo se cargará en un proceso que es independiente del proceso en el que se hospeda la aplicación. Este proceso está restringido al conjunto de permisos de zona de Internet predeterminado, lo que lo aísla de manera eficiente de la aplicación de hospedaje y del equipo cliente.

NotaNota

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

Recursos para desarrollar aplicaciones WPF que promueven la seguridad

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

Área

Recurso

Código administrado

Patterns and Practices Security Guidance for Applications

CAS

Seguridad de acceso del código

ClickOnce

Seguridad e implementación ClickOnce

WPF

Seguridad de confianza parcial de WPF

Vea también

Conceptos

Seguridad de confianza parcial de WPF

Estrategia de seguridad de WPF: Seguridad de plataforma

Estrategia de seguridad de WPF: Ingeniería de seguridad

Seguridad de acceso del código

Seguridad e implementación ClickOnce

Información general sobre XAML (WPF)

Otros recursos

Patterns and Practices Security Guidance for Applications