Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Importante
Este contenido solo se aplica a .NET Framework a menos que se especifique lo contrario.
La configuración de seguridad de .NET Framework puede hacer que la aplicación se ejecute de forma diferente en un entorno de confianza parcial que en el equipo local. .NET Framework restringe el acceso a recursos locales críticos como el sistema de archivos, la red y las API no administradas, entre otras cosas. La configuración de seguridad afecta a la capacidad de llamar a la API de Microsoft Windows u otras API que el sistema de seguridad no puede comprobar. La seguridad también afecta a otros aspectos de la aplicación, incluido el acceso a archivos y datos, e impresión. Para obtener más información sobre el acceso a archivos y datos en un entorno de confianza parcial, vea Más seguro acceso a archivos y datos en Formularios Windows Forms. Para obtener más información sobre la impresión en un entorno de confianza parcial, vea Impresión más segura en Formularios Windows Forms.
En las secciones siguientes se describe cómo trabajar con el Portapapeles, realizar la manipulación de ventanas y llamar a la API de Windows desde aplicaciones que se ejecutan en un entorno de confianza parcial.
Acceso al Portapapeles
La UIPermission clase controla el acceso al Portapapeles y el valor de enumeración asociado UIPermissionClipboard indica el nivel de acceso. En la tabla siguiente se muestran los posibles niveles de permisos.
| Valor UIPermissionClipboard | Descripción |
|---|---|
| AllClipboard | El Portapapeles se puede usar sin restricciones. |
| OwnClipboard | El Portapapeles se puede usar con algunas restricciones. La capacidad de colocar datos en el Portapapeles (operaciones de comando Copiar o Cortar) no está restringida. Los controles intrínsecos que aceptan pegar, como un cuadro de texto, pueden aceptar datos del Portapapeles, pero los controles de usuario no pueden leer mediante programación desde el Portapapeles. |
| NoClipboard | No se puede usar el Portapapeles. |
De forma predeterminada, la zona intranet local recibe AllClipboard acceso y la zona de Internet recibe OwnClipboard acceso. Esto significa que la aplicación puede copiar datos en el Portapapeles, pero la aplicación no puede pegar o leer desde el Portapapeles mediante programación. Estas restricciones impiden que los programas sin plena confianza lean el contenido copiado en el Portapapeles por otra aplicación. Si tu aplicación requiere permisos completos del Portapapeles, pero no tienes los permisos, tendrás que elevar los permisos de tu aplicación. Para obtener más información sobre la elevación de permisos, consulte Administración general de políticas de seguridad.
Manipulación de ventanas
La UIPermission clase también controla el permiso para realizar la manipulación de ventanas y otras acciones relacionadas con la interfaz de usuario, y el valor de enumeración asociado UIPermissionWindow indica el nivel de acceso. En la tabla siguiente se muestran los posibles niveles de permisos.
De forma predeterminada, la zona intranet local recibe AllWindows acceso y la zona de Internet recibe SafeTopLevelWindows acceso. Esto significa que, en la zona de Internet, la aplicación puede realizar la mayoría de las acciones de ventana e interfaz de usuario, pero se modificará la apariencia de la ventana. La ventana modificada muestra una notificación de globo cuando se ejecuta por primera vez, contiene texto de la barra de título modificada y requiere un botón cerrar en la barra de título. La notificación de globo y la barra de título identifican al usuario de la aplicación que la aplicación se ejecuta bajo confianza parcial.
| Valor UIPermissionWindow | Descripción |
|---|---|
| AllWindows | Los usuarios pueden usar todos los eventos de entrada de usuario y ventanas sin restricciones. |
| SafeTopLevelWindows | Los usuarios solo pueden usar ventanas de nivel superior más seguras y subventanas más seguras para dibujar, y solo pueden usar eventos de entrada de usuario para la interfaz de usuario dentro de esas ventanas y subventanas de nivel superior. Estas ventanas más seguras están claramente etiquetadas y tienen restricciones de tamaño mínimo y máximo. Las restricciones impiden ataques de suplantación de identidad potencialmente perjudiciales, como la imitación de pantallas de inicio de sesión del sistema o el escritorio del sistema, y restringe el acceso mediante programación a las ventanas primarias, las API relacionadas con el foco y el uso del ToolTip control, |
| SafeSubWindows | Los usuarios solo pueden usar subventanas más seguras para dibujar y solo pueden usar eventos de entrada de usuario para la interfaz de usuario dentro de esa subventana. Un control que se muestra dentro de un explorador es un ejemplo de una subventana más segura. |
| NoWindows | Los usuarios no pueden usar eventos de interfaz de usuario ni ventanas. No se puede usar ninguna interfaz de usuario. |
Cada nivel de permiso identificado por la UIPermissionWindow enumeración permite menos acciones que el nivel anterior. En las siguientes tablas se indican las acciones restringidas por los valores SafeTopLevelWindows y SafeSubWindows. Para obtener los permisos exactos necesarios para cada miembro, consulte la referencia de ese miembro en la documentación de la biblioteca de clases de .NET Framework.
SafeTopLevelWindows la autorización restringe las acciones enumeradas en la tabla siguiente.
| Componente | Acciones restringidas |
|---|---|
| Application | - Establecer la SafeTopLevelCaptionFormat propiedad . |
| Control | - Obtención de la Parent propiedad . - Establecer la Region propiedad .- Llamar al método FindForm, Focus, FromChildHandle y a los métodos FromHandle, PreProcessMessage, ReflectMessage o SetTopLevel. - Llamar al método GetChildAtPoint si el control devuelto no es un hijo del control que realiza la llamada. - Modificar el foco de control dentro de un control contenedor. |
| Cursor | - Establecer la Clip propiedad . Llamando al método Hide. |
| DataGrid | Llamando al método ProcessTabKey. |
| Form | - Obtención de la ActiveForm propiedad o MdiParent . - Establecer la ControlBoxpropiedad , ShowInTaskbaro TopMost . - Establecer la Opacity propiedad por debajo de 50%. - Establecer la WindowState propiedad en Minimized mediante programación. Llamando al método Activate. : se usan los Nonevalores de enumeración , FixedToolWindowy SizableToolWindowFormBorderStyle . |
| NotifyIcon | - El uso del NotifyIcon componente está completamente restringido. |
El SafeSubWindows valor restringe las acciones enumeradas en la tabla siguiente, además de las restricciones colocadas por el SafeTopLevelWindows valor.
| Componente | Acciones restringidas |
|---|---|
| CommonDialog | : se muestra un cuadro de diálogo derivado de la CommonDialog clase . |
| Control | Llamando al método CreateGraphics. - Establecer la Cursor propiedad . |
| Cursor | - Establecer la Current propiedad . |
| MessageBox | Llamando al método Show. |
Hospedaje de controles de terceros
Otro tipo de manipulación de ventanas puede producirse si los formularios hospedan controles de terceros. Un control de terceros es cualquier UserControl personalizado que no haya desarrollado y compilado usted mismo. Aunque el escenario de hospedaje es difícil de aprovechar, teóricamente es posible que un control de terceros expanda su superficie de representación para cubrir todo el área del formulario. Este control podría imitar un cuadro de diálogo crítico y solicitar información como combinaciones de nombre de usuario y contraseña o números de cuenta bancaria de los usuarios.
Para limitar este riesgo potencial, use controles de terceros solo de proveedores en los que pueda confiar. Si usa controles de terceros que ha descargado de un origen no verificable, se recomienda revisar el código fuente para detectar posibles vulnerabilidades de seguridad. Después de comprobar que el origen no es malintencionado, debe compilar el ensamblado usted mismo para asegurarse de que el origen coincide con el ensamblado.
Llamadas api de Windows
Si el diseño de la aplicación requiere llamar a una función desde la API de Windows, está accediendo al código no administrado. En este caso, las acciones del código en la ventana o el sistema operativo no se pueden determinar cuando se trabaja con llamadas o valores de la API de Windows. La clase SecurityPermission y el valor de la enumeración UnmanagedCode controlan el acceso de SecurityPermissionFlag al código no administrado. Una aplicación solo puede acceder al código no administrado cuando se le concede el UnmanagedCode permiso. De forma predeterminada, solo las aplicaciones que se ejecutan localmente pueden llamar al código no administrado.
Algunos miembros de Windows Forms proporcionan acceso no administrado que requiere el UnmanagedCode permiso. En la tabla siguiente se enumeran los miembros del System.Windows.Forms espacio de nombres que requieren el permiso. Para obtener más información sobre los permisos necesarios para un miembro, consulte la documentación de la biblioteca de clases de .NET Framework.
| Componente | Miembro |
|---|---|
| Application |
-
AddMessageFilter método - CurrentInputLanguage propiedad - Exit método- ExitThread método - ThreadException evento |
| CommonDialog |
-
HookProc método - OwnerWndProc\método - Reset método - RunDialog método |
| Control |
-
CreateParams método - DefWndProc método - DestroyHandle método - WndProc método |
| Help |
-
ShowHelp métodos - ShowHelpIndex método |
| NativeWindow | - NativeWindow clase |
| Screen | - FromHandle método |
| SendKeys |
-
Send método - SendWait método |
Si la aplicación no tiene permiso para llamar a código no administrado, la aplicación debe solicitar UnmanagedCode permiso o debe considerar formas alternativas de implementar características; en muchos casos, Windows Forms proporciona una alternativa administrada a las funciones de la API de Windows. Si no existe ningún medio alternativo y la aplicación debe acceder al código no administrado, tendrá que elevar los permisos de la aplicación.
El permiso para llamar a código no administrado permite que una aplicación realice la mayoría de las tareas. Por lo tanto, solo se debe conceder permiso para llamar al código no administrado para las aplicaciones que proceden de un origen de confianza. Como alternativa, dependiendo de la aplicación, la parte de la funcionalidad de la aplicación que realiza la llamada al código no administrado podría ser opcional o habilitarse solo en el entorno de plena confianza. Para obtener más información sobre los permisos peligrosos, consulte Permisos peligrosos y administración de directivas. Para obtener más información sobre la elevación de permisos, consulte Administración general de políticas de seguridad.
Consulte también
.NET Desktop feedback