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:
Servicios web mediante Windows Communication Foundation (vea Confianza parcial).
XAML (consulte Información general sobre XAML).
Menús emergentes (consulte System.Windows.Controls.Primitives.Popup).
Arrastrar y colocar (consulte Información general sobre la función de arrastrar y colocar).
Portapapeles (consulte System.Windows.Clipboard).
Imágenes (consulte System.Windows.Controls.Image).
Serialización (consulte XamlReader.Load, XamlWriter.Save).
Cuadro de diálogo de apertura de archivos (consulte Microsoft.Win32.OpenFileDialog).
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:
Herramienta de generación y edición de manifiestos (Mage.exe).
Herramienta de generación y edición de manifiestos, cliente gráfico (MageUI.exe).
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. |