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
Navegación segura
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:
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 |
Nota |
---|
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:
Abra el Panel de control.
Haga clic en Red e Internet y, a continuación, 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 configura la configuración de seguridad.
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.
Nota |
---|
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.
Nota |
---|
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.
Nota |
---|
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.
Nota |
---|
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.
Nota |
---|
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.
Nota |
---|
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 |
|
CAS |
|
ClickOnce |
|
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)