Permisos de seguridad

Common Language Runtime permite que el código realice únicamente las operaciones para las que tiene permiso. El runtime usa objetos denominados permisos para exigir restricciones en código administrado. El runtime proporciona clases de permiso integradas en varios espacios de nombres, y también permite diseñar e implementar clases de permiso personalizadas.

Hay dos tipos de permisos y cada uno de ellos tiene una finalidad concreta:

Los permisos de seguridad pueden ser una clase de permiso (seguridad imperativa) o un atributo que representa una clase de permiso (seguridad declarativa). La clase base de los permisos de seguridad es System.Security.CodeAccessPermission; la clase base de los atributos de permiso de seguridad es System.Security.Permissions.CodeAccessSecurityAttribute.

En el momento de cargar una aplicación, en forma de ensamblado, en un dominio de aplicación, se le concede un conjunto de permisos. Las concesiones se suelen realizar mediante conjuntos de permisos predefinidos que vienen determinados por el método SecurityManager.GetStandardSandbox. El conjunto de permisos concedidos determina los permisos de los que dispone el código. El runtime concede permisos basándose en la ubicación de origen del código (por ejemplo, el equipo local, la intranet local o Internet). También se puede conceder permisos especiales al código si se carga en un espacio aislado. Para obtener más información sobre la ejecución de código en un espacio aislado, vea Cómo: Ejecutar código de confianza parcial en un recinto.

A continuación se enumeran los principales usos de los permisos:

  • El código de biblioteca puede solicitar que los llamadores tengan permisos específicos. Si se utiliza el método Demand para solicitar un permiso determinado en un código, se espera que todo el código que utilice dicho código tenga ese permiso para la ejecución. Las solicitudes pueden usarse para determinar si los llamadores tienen acceso a determinados recursos o para detectar la identidad de un llamador.

  • El código puede usar los permisos para denegar el acceso a los recursos que desea proteger. Puede usar SecurityAction.PermitOnly para especificar un conjunto de permisos restringido, denegando implícitamente todos los demás permisos. Sin embargo, no se recomienda usar PermitOnly para prohibir el acceso con el propósito de ofrecer protección contra el uso indebido intencionado. Los ensamblados a los que se llama, que tienen los permisos rechazados implícitamente en su conjunto de permisos concedidos, pueden reemplazar los permisos denegados realizando una SecurityAction.Assert para cualquier permiso que deseen usar. Por ejemplo, si permitía solo UIPermission y llamó a un ensamblado que inherentemente tiene FileIOPermission, el ensamblado puede hacer simplemente una Assert para FileIOPermission y realizar operaciones de archivo. La única manera de proteger de forma segura los recursos contra código que no es de confianza en los ensamblados a los que se hace referencia es ejecutar ese código con un conjunto de permisos concedidos que no incluya los permisos denegados.

Vea también

Conceptos

Permisos de acceso a código

Permisos de seguridad basada en roles

Otros recursos

Conceptos clave de seguridad