Escribir controles administrados seguros

Los controles administrados son ensamblados a los que se hace referencia en las páginas Web que se descargan en el equipo del usuario y se ejecutan a petición. Desde la perspectiva de la seguridad de acceso a código, hay dos tipos de controles administrados: los que se ejecutan siguiendo la directiva de seguridad predeterminada y los que requieren una mayor confianza.

Para escribir controles administrados destinados a ser ejecutados bajo la directiva de seguridad predeterminada, sólo es necesario saber qué operaciones se permiten en la directiva de seguridad predeterminada para las zonas de la intranet o de Internet. Siempre y cuando un control administrado no requiera más permisos para ejecutarse del que recibe como resultado de su zona de origen, se ejecutará. (Tenga en cuenta que un administrador o un usuario puede decidir no conceder tantos permisos al código procedente de las zonas de Internet o la intranet). Para ejecutar controles administrados que requieran una mayor confianza, el administrador o el usuario deberá ajustar la directiva de seguridad de los equipos en los que se ejecute el código.

Siempre que sea posible, los controles administrados deben escribirse de modo que no requieran permisos que no se conceden al código de Internet o la intranet de manera predeterminada. En el caso de la zona de Internet, esto significa que el código está limitado a mostrar SafeTopLevelWindows y SafeSubWindows (retocadas por el sistema de seguridad para impedir que se suplanten los cuadros de diálogo del sistema), a comunicarse sólo con su sitio de origen y a utilizar un almacenamiento restringido y aislado.

El código de la intranet tiene permisos ligeramente superiores. Para obtener información detallada, vea Directiva de seguridad predeterminada. Si el control necesita obtener acceso a archivos, utilizar bases de datos, recopilar información sobre el equipo cliente, etc., requerirá mayor grado de confianza.

Desarrollo

Los controles de gran confianza están destinados a ejecutarse bajo una directiva de seguridad menos estricta de lo que normalmente permitiría su origen (la intranet o Internet). La mayoría de las peticiones de permisos realizadas por las bibliotecas seguras, como las clases de .NET Framework, realizan recorridos de pila donde se comprueban todos los llamadores para garantizar que hayan recibido el permiso exigido y que las páginas Web, aunque no se trate de código administrado, sean tratadas como llamadores en lo que a seguridad se refiere. Los recorridos de pila se realizan para ayudar a evitar que el código de menor confianza actúe en el código de gran confianza para realizar operaciones maliciosas.

Dado que los controles administrados alojados en un explorador pueden ser manipulados por las secuencias de comandos activas de una página Web, esa página Web se considera un llamador y se comprueba durante el recorrido de pila de seguridad para ayudar a evitar que los creadores de páginas Web maliciosas hagan uso del código de mayor confianza. La consecuencia de tratar una página Web como un llamador consiste en que un control al que se haya concedido un alto nivel de confianza basándose en su nombre seguro o certificado de fabricante y que se ejecute desde una página Web no podrá realizar las operaciones que normalmente no se permiten al código procedente de la misma zona que la propia página Web (intranet o Internet). Para obtener más información sobre las consideraciones de implementación, vea la sección siguiente. Aparentemente, parece que no se pueden escribir controles de gran confianza, pero la seguridad de acceso a código proporciona medios para este escenario, permitiendo reemplazar selectivamente el comportamiento del recorrido de pila de seguridad.

Los controles de gran confianza deben hacer un uso prudente de Asserts para acortar los recorridos de pila y obtener permisos que sus llamadores (las páginas Web desde donde se ejecutaron) normalmente no tendrían. Cuando utilice Asserts, tenga cuidado de no exponer API peligrosas que permitirían que páginas Web maliciosas realizasen operaciones inadecuadas. Por este motivo, el nivel de cuidado y seguridad necesario al escribir un control de gran confianza es muy similar al que se requiere para escribir una biblioteca de clases segura.

A continuación, se presentan algunas sugerencias para escribir controles administrados seguros:

  • Cuando sea posible, encapsule las operaciones que requieren una gran confianza de modo que el control no las exponga. De esta manera, puede afirmar que los permisos que requieren esas operaciones y tienen páginas Web que utilizan el control no podrán abusar de su funcionalidad.

  • Si el diseño del control requiere que se expongan las operaciones de gran confianza que ejecuta, considere la posibilidad de realizar una petición de permiso de identidad de sitio o dirección URL para garantizar que puedan llamarlo sólo las páginas Web desde las que pretende ejecutarlo.

Implementación

Se recomienda que los controles de gran confianza tengan siempre nombres seguros o estén firmados con un certificado de fabricante (X.509). Esto permite a los administradores de directivas conceder una mayor confianza a estos controles sin reducir su seguridad respecto a otro código de la intranet o de Internet. Después de firmar el ensamblado, el usuario debe crear un nuevo grupo de código asociado a permisos suficientes y debe especificar que sólo el código firmado por la compañía o la organización del usuario puede pertenecer al grupo de código. Después de modificar la directiva de seguridad de esta manera, el control de gran confianza recibirá los permisos suficientes para ejecutarse.

Dado que la directiva de seguridad debe modificarse para que puedan funcionar los controles de gran confianza descargados, la implementación de este tipo de control es mucho más sencilla en las intranets corporativas ya que normalmente disponen de un administrador empresarial que pueda implementar los cambios de directiva descritos en varios equipos cliente. Para que los controles de gran confianza puedan ser utilizados en Internet por distintos tipos de usuarios sin ninguna afiliación corporativa u organizativa común, debe existir una relación de confianza entre el fabricante del control y el usuario. Por último, el usuario debe comprender las instrucciones del fabricante para modificar la directiva y permitir así que se ejecute el control de gran confianza. En caso contrario, el control no podrá ejecutarse.

Vea también

Conceptos

Introducción a la seguridad de acceso a código
Escribir bibliotecas de clases seguras
Directiva de seguridad predeterminada

Otros recursos

Crear y utilizar ensamblados con nombre seguro
Administración de directivas de seguridad