Seguridad (WPF)

Al desarrollar aplicaciones Windows Presentation Foundation (WPF) independientes y hospedadas en explorador, debe tener en cuenta el modelo de seguridad. Las aplicaciones independientes de WPF se ejecutan con permisos sin restricciones (conjunto de permisos CAS FullTrust), tanto si se implementan mediante 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 una confianza parcial AppDomain mediante el .NET Framework de complemento. Para obtener más información, vea Wpf Add-Ins información general.

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

Las aplicaciones hospedadas en explorador wpf se ejecutan dentro de un espacio aislado de seguridad de confianza parcial, de forma predeterminada, que se limita al conjunto de permisos de zona de Internet cas predeterminado. Esto aísla de forma eficaz las aplicaciones hospedadas en explorador de WPF del equipo cliente de la misma manera que se esperaría que las aplicaciones web típicas se aíslen. 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 describe el modelo de seguridad para Windows Presentation Foundation (WPF) aplicaciones independientes y hospedadas en explorador.

Este tema contiene las siguientes secciones:

Navegación segura

En el caso de los XBAP, WPF distingue 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 aplicaciones (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 viene determinado principalmente por si se usa la navegación por la aplicación o la navegación del explorador.

Seguridad de navegación de aplicación

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 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 Content. pack://application:,,,/MyContentFile.xaml
Sitio de origen Archivos que se agregan a un proyecto con un tipo de compilación None. 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 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 los paquetes, vea Archivos de datos, contenido y recursos de aplicación 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 haciendo clic en un Hyperlink elemento.

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

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 haciendo clic en un Hyperlink elemento que se encuentra dentro del elemento 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 un XBAP intenta navegar al contenido de una manera que no cumple estas condiciones, se SecurityException produce una excepción .

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. Exploración web software incluye cualquier aplicación o componente que use las API de WinINet o UrlMon, incluidos Internet Explorer y PresentationHost.exe.

Internet Explorer proporciona un mecanismo por el que puede configurar la funcionalidad que se puede ejecutar mediante o desde Internet Explorer, incluidos los siguientes:

  • .NET Framework componentes dependientes de la aplicación

  • Controles y complementos de 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 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, 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 configurarán las opciones de seguridad.

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

    Aparece el cuadro de Configuración seguridad y puede configurar los valores de seguridad de la zona seleccionada.

    Captura de pantalla que muestra el cuadro de diálogo Configuración 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 Windows Internet Explorer 7, se incluyen las siguientes opciones de seguridad específicamente para .NET Framework datos:

  • XAML dinámico. Controla si Internet Explorer puede navegar a archivos XAML flexibles y desplazarse. (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 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 WebBrowser control WPF se puede usar para hospedar contenido web. El WebBrowser control WPF encapsula el control WebBrowser ActiveX subyacente. WPF proporciona cierta compatibilidad para proteger la aplicación cuando se usa el control WPF WebBrowser para hospedar contenido web que no es de confianza. Sin embargo, algunas características de seguridad deben ser aplicadas directamente por las aplicaciones que usan el WebBrowser control . Para obtener más información sobre el control webBrowser ActiveX, vea WebBrowser Control Overviews and Tutorials.

Nota

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

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

Si la aplicación usa el control WPF, otra manera de aumentar la seguridad y mitigar los ataques es habilitar Internet Explorer WebBrowser controles de características. Los controles de características son adiciones Internet Explorer que permiten a los administradores y desarrolladores configurar características de Internet Explorer y aplicaciones que hospedan el control webBrowser ActiveX, que incluye el WebBrowser control WPF. 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 a los controles de características de Internet.

Si está desarrollando una aplicación DE WPF independiente que usa el control WPF, WPF habilita automáticamente los siguientes controles WebBrowser de características 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ísticas se aplican mediante el proceso que crea una instancia del objeto WebBrowser ActiveX objeto . 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, vea Preguntas más frecuentes sobre la seguridad del host MSHTML: Parte I de II y Preguntas más frecuentes sobre la seguridad del 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 explorador XAML (XBAP) de confianza parcial que incluye un control WPF en Windows Internet Explorer, WPF hospeda el control webBrowser ActiveX en el espacio de direcciones del proceso WebBrowser de Internet Explorer. Puesto que el control ActiveX WebBrowser se hospeda en el proceso Internet Explorer, todos los controles de características de Internet Explorer también están habilitados 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 webBrowser ActiveX, 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 intenta ejecutar un XBAP que incluye un control WPF en Firefox, mientras se encuentra en la zona de Internet, se WebBrowser produce una SecurityException excepción . Esto se debe a la directiva de seguridad de WPF.

Deshabilitar ensamblados APTCA para aplicaciones cliente de 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 usarlos. Para permitir que las aplicaciones de confianza parcial las usen, deben marcarse con 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 presente un error de seguridad después de instalarse en la 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 de 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 .NET Framework principales no se ven afectados al deshabilitarlos de esta manera 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 flexibles son archivos XAML de solo marcado que no dependen de ningún código subyacente, controlador de eventos XAML o ensamblado específico de la aplicación. Cuando los archivos flexibles se navegan a directamente desde el explorador, se cargan en un espacio aislado de seguridad basado en el conjunto de permisos predeterminado XAML de la zona de Internet.

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

En ambos casos, el archivo flexible al que se navega XAML hereda los permisos de su aplicación host. Sin embargo, este comportamiento puede no ser deseable desde una perspectiva de seguridad, especialmente si un archivo flexible lo produjo una entidad que no es de confianza XAML o desconocida. Este tipo de contenido se conoce como contenido externo y y se puede configurar para Frame NavigationWindow aislarlo cuando se navega a . 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 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

Aunque la navegación a archivos flexibles desde o 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 XAML NavigationWindow Frame 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

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

Área Recurso
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

Consulte también