Seguridad de Windows Presentation Foundation

Actualización: noviembre 2007

En este tema se describe el modelo de seguridad para aplicaciones de Windows Presentation Foundation (WPF) independientes y hospedadas por explorador.

Las aplicaciones independientes de WPF se ejecutan con permisos no restringidos (conjunto de permisos FullTrust de CAS), independientemente de que se hayan implementado mediante Windows Installer (.msi), DOS XCopy o ClickOnce.

Las aplicaciones de WPF hospedadas por explorador se hospedan en Windows Internet Explorer, y pueden ser Aplicaciones del explorador XAML (XBAPs) o aplicaciones de explorador de Lenguaje de marcado de aplicaciones extensible (XAML) dinámico (consulte Información general sobre aplicaciones de explorador XAML de Windows Presentation Foundation).

De manera predeterminada, las aplicaciones de WPF hospedadas por explorador se ejecutan dentro de un recinto de seguridad de confianza parcial, que se limita al conjunto de permisos de Internet de CAS predeterminado. Con ello, las aplicaciones de WPF hospedadas por 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. La seguridad de confianza parcial se describe con más detalle en Seguridad de confianza parcial en Windows Presentation Foundation.

Este tema contiene las secciones siguientes.

  • Navegación segura
  • Configuración de seguridad de Internet Explorer
  • Deshabilitar los ensamblados APTCA para las aplicaciones cliente de confianza parcial
  • Recintos de seguridad para XAML dinámico externo
  • Procedimientos recomendados para programar aplicaciones de WPF seguras
  • Temas relacionados

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

La navegación de aplicación consiste en navegar entre los elementos de contenido de una aplicación hospedada por un explorador; por su parte, la navegación de explorador es aquélla que cambia el contenido del propio explorador. La relación entre la navegación de ámbito de aplicación y de ámbito de explorador se muestra en la ilustración siguiente:

Diagrama de navegación

El tipo de contenido que se considera seguro para que una XBAP pueda navegar a él se determina principalmente según cuál sea el ámbito de la navegación, de aplicación o de explorador.

Seguridad de la navegación de aplicación

La navegación de ámbito de aplicación se considera segura si se puede identificar mediante un pack URI, que admite cuatro tipos de contenido:

  • Archivos de recurso, que son archivos que se agregan a un proyecto cuyo tipo de compilación es Recurso, y que se pueden identificar mediante un URI como el siguiente:

    pack://application:,,,/MyResourceFile.xaml

  • Archivos de contenido, que son archivos que se agregan a un proyecto cuyo tipo de compilación es Contenido, y que se pueden identificar mediante un URI como el siguiente:

    pack://application:,,,/MyContentFile.xaml

  • Archivos del sitio de origen, que son archivos que se agregan a un proyecto cuyo tipo de compilación es Ninguno, y que se pueden identificar mediante un URI como el siguiente:

    pack://siteoforigin:,,,/MySiteOfOriginFile.xaml

  • Archivos de código de aplicación, que son archivos que se agregan a un proyecto cuyo tipo de compilación es Página, y que se pueden identificar mediante un URI como el siguiente:

    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 c Windows Presentation Foundation.

Los archivos de estos tipos de contenido se pueden examinar como resultado de una navegación efectuada por el usuario o de una navegación mediante programación:

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

  • Navegación mediante programación. La aplicación provoca la navegación sin intervención del usuario.

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 provoca la navegación haciendo clic en un elemento Hyperlink.

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

  • Protocolo. El protocolo utilizado es http:, https:, file: o mailto:.

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

Configuración de seguridad de Internet Explorer

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 posibilidad de ejecutar una función, y cómo se ejecute, viene determinado por un valor de la configuración de seguridad. Puede configurar este valor de modo que habilite o deshabilite completamente una función, o bien de modo que se pida al usuario que decida qué desea hacer cada vez que una función intente ejecutarse.

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 que no son de confianza. Para establecer la configuración de seguridad, haga lo siguiente:

  1. Abra Internet Explorer.

  2. En el menú Herramientas, haga clic en Opciones | Seguridad.

  3. Seleccione la zona cuyos valores de seguridad desea configurar.

  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

Windows Internet Explorer 7 incluye específicamente los cuatro valores de seguridad siguientes para .NET Framework:

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

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

  • Documentos XPS. Controla si Internet Explorer 7 puede navegar hasta de XML Paper Specification (XPS) y cargarlos (opciones: Habilitar, Deshabilitar y Pedir datos).

  • Habilitar la instalación de .NET Framework. Controla si .NET Framework se puede instalar a través de Internet Explorer 7 (opciones: Habilitar o Deshabilitar, únicamente).

  • 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 que no son de confianza.

Configuración de seguridad para IE6 y versiones anteriores

Para las versiones de Internet Explorer distintas de Internet Explorer, la configuración de seguridad de varios valores relacionados con .NET Framework se pueden establecer en el Registro, bajo la clave siguiente:

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.

XPSDocumentsDisallow

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.

Nota

De estos valores, XBAPDisallow y WebBrowserDisallow funcionan para todas las versiones de Internet Explorer.

Deshabilitar los ensamblados APTCA para las aplicaciones cliente de confianza parcial

Cuando se instalan ensamblados administrados en caché de ensamblados global (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 editores de ensamblados pueden compilar una revisión 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 revisió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 las aplicaciones de WPF de confianza parcial, incluidas las XBAPs, sin desinstalar el ensamblado APTCA.

Para deshabilitar un ensamblado APTCA, es preciso crear una clave especial bajo la siguiente clave del Registro:

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

A continuación se muestra un ejemplo de clave:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0

Este código establece una entrada para el ensamblado APTCA, aunque también es preciso crear un valor bajo esta clave que habilite o deshabilite el ensamblado. A continuación, se muestran los detalles del valor que hay que crear:

  • Nombre del valor: APTCA_FLAG.

  • Tipo de valor: REG_DWORD.

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

Los editores de un ensamblado que es preciso deshabilitar para las aplicaciones cliente de confianza parcial de esta manera pueden escribir una revisión para crear una clave del Registro y entradas de valor para el ensamblado.

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 y que no sean de .NET Framework.

Recintos de seguridad para XAML dinámico externo

Los archivos de XAML dinámico son archivos .xaml sólo de marcado que no se pueden identificar mediante un pack URI (consulte URIs de paquete en Windows Presentation Foundation). Esto significa que no se trata de archivos de recursos, de contenido ni de sitio de origen (consulte Archivos c Windows Presentation Foundation).

Cuando se navega a archivos de XAML dinámico directamente desde Internet Explorer, el conjunto de permisos de zona de Internet predeterminado los encierra en un recinto de seguridad.

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 efectiva de la aplicación de hospedaje y del equipo cliente.

Procedimientos recomendados para programar aplicaciones de WPF seguras

Para crear aplicaciones para WPF seguras es preciso aplicar los procedimientos recomendados para lo siguiente:

Vea también

Conceptos

Seguridad de confianza parcial en Windows Presentation Foundation

Estrategia de seguridad de Windows Presentation Foundation: Seguridad de la plataforma

Estrategia de seguridad de Windows Presentation Foundation: Ingeniería de seguridad

Información general sobre la implementación de ClickOnce

Información general sobre XAML

Otros recursos

Patterns and Practices Security Guidance for Applications

Seguridad de acceso a código