Seguridad de confianza parcial en Windows Presentation Foundation

Actualización: Julio de 2008

En general, las aplicaciones de Internet deben tener restringido el acceso directo a los recursos del sistema críticos, a fin de evitar los daños malintencionados. De manera predeterminada, HTML y los lenguajes de script de cliente no pueden tener acceso a los recursos del sistema críticos. Dado que las aplicaciones Windows Presentation Foundation (WPF) hospedadas por el explorador se pueden iniciar desde el explorador, deben cumplir un conjunto de restricciones similar. Para exigir estas restricciones, WPF se basa en Seguridad de acceso a código (CAS) y ClickOnce (consulte Estrategia de seguridad de Windows Presentation Foundation: Seguridad de la plataforma). De manera predeterminada, las aplicaciones hospedadas por el explorador solicitan el conjunto de permisos Zona de Internet de CAS, con independencia de si se inician desde Internet, desde la intranet local o desde el equipo local. Se dice que las aplicaciones que se ejecutan con menos permisos que el conjunto completo de permisos se están ejecutando con confianza parcial.

WPF proporciona gran variedad de características de compatibilidad para asegurarse de que se pueda utilizar tanta funcionalidad como sea posible sin riesgo alguno en confianza parcial y, junto con CAS, proporciona la compatibilidad adicional para la programación de confianza parcial.

Este tema contiene las secciones siguientes.

  • Compatibilidad con la confianza parcial de las características de WPF
  • Programación de la confianza parcial
  • Administrar permisos
  • Temas relacionados

Compatibilidad con la confianza parcial de las características de WPF

En la tabla siguiente se muestra una lista de las características generales de Windows Presentation Foundation (WPF) que resulta seguro utilizar dentro de los límites del conjunto de permisos Zona de Internet.

Tabla 1: Características de WPF seguras con confianza parcial

Área de la característica

Feature

General

Explorador (Ventana)

Acceso al sitio de origen

Almacenamiento aislado (límite de 512 KB)

Proveedores de automatización de la IU

Comandos

Editores de métodos de entrada (IME)

Lápiz óptico de Tablet PC y entradas manuscritas

Métodos de arrastrar y colocar simulados mediante eventos Capture y Move del mouse.

OpenFileDialog

Deserialización XAML (mediante XamlReader.Load)

Integración en web

Cuadro de diálogo de descarga del explorador

Navegación de nivel superior iniciada por el usuario

mailto:links

Parámetros de identificador uniforme de recursos

HTTPWebRequest

Contenido WPF hospedado en IFRAME

Hospedar páginas HTML del mismo sitio mediante Frame

Hospedar páginas HTML del mismo sitio mediante WebBrowser

Servicios web (ASMX)

Servicios web (mediante Windows Communication Foundation)

Elementos visuales

2D y 3D

Animación

Multimedia (sitio de origen y entre dominios)

Imágenes/audio/vídeo

Lectura

Documentos dinámicos

Documentos XPS

Fuentes incrustadas y del sistema

Fuentes CFF y TrueType

Edición

Revisión ortográfica

RichTextBox

Texto simple y compatibilidad de portapapeles de entradas manuscritas

Acción de pegar iniciada por el usuario

Copiar contenido seleccionado

Controles

Controles generales

En esta tabla se muestran las características de WPF de alto nivel. Para obtener más información detallada, en Kit de desarrollo de software de Windows (SDK) se documentan los permisos que necesita cada miembro en WPF. Asimismo, las características siguientes ofrecen información más detallada relativa a la ejecución de la confianza parcial, incluidas algunas consideraciones especiales:

En la tabla siguiente se describen las características de WPF que no es seguro ejecutar dentro de los límites del conjunto de permisos Zona de Internet:

Tabla 2: Características de WPF no seguras con confianza parcial

Área de la característica

Feature

General

Ventana (ventanas y cuadros de diálogo definidos por la aplicación)

SaveFileDialog

Sistema de archivos

Acceso al Registro

Arrastrar y colocar

Serialización XAML (mediante XamlWriter.Save)

Clientes de automatización de la interfaz de usuario

Acceso a la ventana de origen (HwndHost)

Compatibilidad plena con voz

Interoperabilidad con formularios Windows Forms

Integración en web

Scripting

Modelo de objetos de documento

Elementos visuales

Efectos de mapa de bits

Codificación de imágenes

Edición

Portapapeles de formato de texto enriquecido

Compatibilidad plena con XAML

Programación de la confianza parcial

Para las aplicaciones XBAP, el código que supera el conjunto de permisos de Zona de Internet predeterminado será detectado por CAS y producirá una excepción de seguridad y la finalización de la aplicación. Aunque esto protege a los usuarios, no representa una óptima experiencia de usuario.

En general, es probable que el código que puede superar los permisos permitidos sea código común que se comparte entre las aplicaciones independientes y hospedadas por explorador. CAS y WPF proporcionan varias técnicas para administrar este escenario.

Detectar permisos mediante CAS

En algunas situaciones, es posible que el código compartido en los ensamblados de bibliotecas se utilice en aplicaciones independientes y XBAPs. En estos casos, el código puede ejecutar funcionalidad que podría requerir más permisos de los permitidos por el conjunto de permisos de la aplicación. La aplicación puede detectar si tiene un permiso determinado o no mediante la seguridad de Microsoft .NET Framework. En particular, puede comprobar si tiene un permiso concreto llamando al método Demand en la instancia del permiso deseado. Esto se muestra en el ejemplo siguiente, que contiene código que consulta si tiene la capacidad de guardar un archivo en el disco local:

Si una aplicación no tiene el permiso deseado, la llamada a Demand provocará una excepción de seguridad. De lo contrario, se ha concedido el permiso. IsPermissionGranted encapsula este comportamiento y devuelve true o false según corresponda.

Degradación correcta de la funcionalidad

Poder detectar si el código tiene permiso para lo que necesita hacer es interesante para el código que se puede ejecutar desde zonas diferentes. Aunque detectar la zona es necesario, resulta mucho mejor proporcionar una alternativa al usuario, si es posible. Por ejemplo, una aplicación de plena confianza suele permitir al usuario crear los archivos que desee en cualquier lugar, mientras que una aplicación de confianza parcial sólo permite crearlos en almacenamiento aislado. Si el código para crear un archivo existe en un ensamblado (.dll) compartido por aplicaciones de plena confianza (independientes) y de confianza parcial (hospedadas por explorador), y ambas aplicaciones desean que los usuarios puedan crear archivos, el código compartido debería detectar si se ejecuta con confianza parcial o plena antes de crear un archivo en la ubicación adecuada. En el código siguiente se muestran ambas operaciones.

En muchos casos, debe existir una alternativa de confianza parcial.

En un entorno controlado, como una intranet, los marcos de trabajo administrados personalizados se pueden instalar en toda la base de clientes en caché de ensamblados global (GAC). Estas bibliotecas pueden ejecutar código que requiere plena confianza y se puede hacer referencia a ellas en las aplicaciones que sólo tienen confianza parcial mediante AllowPartiallyTrustedCallersAttribute (vea Seguridad de Windows Presentation Foundation y Estrategia de seguridad de Windows Presentation Foundation: Seguridad de la plataforma para obtener más información).

Detección del host del explorador

Utilizar CAS para comprobar los permisos es una técnica conveniente cuando se necesita comprobar los permisos uno a uno. Sin embargo, esta técnica depende de que se detecten las excepciones como parte de procesamiento normal, algo que, en general, no se recomienda, y que puede dar lugar a problemas de rendimiento. En su lugar, si la Aplicación del explorador XAML (XBAP) sólo se ejecuta dentro del recinto de la zona de Internet, puede utilizar BrowserInteropHelper.IsBrowserHosted, que devuelve True para Aplicaciones del explorador XAML (XBAPs).

Vea Ejemplo Detecting If Browser-Hosted.

Nota

IsBrowserHosted únicamente distingue si una aplicación se está ejecutando en un explorador, no detecta con qué conjunto de permisos se está ejecutando.

Administrar permisos

De forma predeterminada, las XBAPs se ejecutan con confianza parcial (conjunto de permisos de Zona de Internet predeterminado). Sin embargo, dependiendo de los requisitos de la aplicación, es posible cambiar el conjunto de permisos predeterminado. Por ejemplo, si se inicianXBAPs desde una intranet local, puede aprovechar un conjunto de permisos mayor, que se muestra en la tabla siguiente.

Tabla 3: Permisos de intranet local y de Internet

Permiso

Atributo

LocalIntranet

Internet

DNS

Tener acceso a los servidores DNS

Yes

No

Variables de entorno

Lectura

Yes

No

Cuadros de diálogo de archivo

Abrir

Yes

Yes

Cuadros de diálogo de archivo

Sin restricciones

Yes

No

Almacenamiento aislado

Aislamiento de ensamblados por usuario

Yes

No

Almacenamiento aislado

Aislamiento desconocido

Yes

Yes

Almacenamiento aislado

Cuota de usuario ilimitada

Yes

No

Multimedia

Audio, vídeo e imágenes seguros

Yes

Yes

Impresión

Impresión predeterminada

Yes

No

Impresión

Impresión segura

Yes

Yes

Reflexión

Emisión

Yes

No

Security

Ejecución de código administrado

Yes

Yes

Security

Declaración de permisos concedidos

Yes

No

Interfaz de usuario

Sin restricciones

Yes

No

Interfaz de usuario

Ventanas de nivel superior seguras

Yes

Yes

Interfaz de usuario

Portapapeles propio

Yes

Yes

Explorador web

Navegación de marcos segura en HTML

Yes

Yes

Si necesita aumentar los permisos, puede utilizar una de las herramientas siguientes:

Si la XBAP requiere plena confianza, puede utilizar las mismas herramientas para aumentar los permisos solicitados, aunque una XBAP sólo recibirá plena confianza si se instala e inicia en el equipo local. Esto significa que no se conserva la compatibilidad con la actualización automática obtenida al publicar las XBAPs en los servidores web.

Vea también

Conceptos

Seguridad de 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

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Se ha agregado una mención al nuevo control WebBrowser.

Cambio de características de SP1.