Code Access Security (CAS), en el marco Microsoft .NET , es la solución de Microsoft para evitar que código que no es de confianza realice acciones privilegiadas. Cuando CLR carga un ensamblaje , obtendrá evidencia del ensamblaje y la utilizará para identificar el grupo de códigos al que pertenece el ensamblaje. Un grupo de códigos contiene un conjunto de permisos (uno o más permisos ). El código que realiza una acción privilegiada realizará una demanda de acceso al código que hará que CLR suba por la pila de llamadas y examine el conjunto de permisos otorgado al ensamblaje de cada método en la pila de llamadas. Los grupos de códigos y conjuntos de permisos los determina el administrador de la máquina, quien define la política de seguridad. Microsoft considera CAS obsoleto y desaconseja su uso. [1] Tampoco está disponible en .NET Core y .NET.
La evidencia puede ser cualquier información asociada con una asamblea. Las evidencias predeterminadas que utiliza la seguridad de acceso al código .NET son:
Un desarrollador puede utilizar evidencia personalizada (la llamada evidencia de ensamblaje), pero esto requiere escribir un ensamblaje de seguridad y en la versión 1.1 [ se necesita aclaración ] de .NET esta función no funciona.
La evidencia basada en un hash del ensamblaje se obtiene fácilmente en código. Por ejemplo, en C# , se pueden obtener pruebas mediante la siguiente cláusula de código:
este . Obtener tipo (). Asamblea . Evidencia
Una política es un conjunto de expresiones que utiliza evidencia para determinar la pertenencia a un grupo de códigos. Un grupo de códigos otorga un conjunto de permisos para los ensamblados dentro de ese grupo. Hay cuatro políticas en .NET:
Las primeras tres políticas se almacenan en archivos XML y se administran a través de la herramienta de configuración .NET 1.1 (mscorcfg.msc). La política final se administra mediante código para el dominio de aplicación actual.
La seguridad de acceso al código presentará la evidencia de un ensamblado para cada política y luego tomará la intersección (es decir, los permisos comunes a todos los conjuntos de permisos generados) como los permisos otorgados al ensamblado.
De forma predeterminada, las políticas Empresa, Usuario y Dominio de aplicación brindan total confianza (es decir, permiten que todos los ensamblados tengan todos los permisos) y la política Máquina es más restrictiva. Dado que se toma la intersección, esto significa que el conjunto de permisos final lo determina la política de la Máquina.
Tenga en cuenta que el sistema de políticas se ha eliminado en .NET Framework 4.0. [2]
Los grupos de códigos asocian una prueba con un conjunto de permisos con nombre. El administrador utiliza la herramienta de configuración .NET para especificar un tipo particular de evidencia (por ejemplo, Sitio) y un valor particular para esa evidencia (por ejemplo, www.mysite.com) y luego identifica el conjunto de permisos que será el grupo de códigos. otorgada.
El código que realiza alguna acción privilegiada solicitará uno o más permisos. La demanda hace que el CLR recorra la pila de llamadas y, para cada método, el CLR se asegurará de que los permisos solicitados estén en los permisos otorgados por el ensamblado del método. Si no se concede el permiso, se genera una excepción de seguridad. Esto evita que el código descargado realice acciones privilegiadas. Por ejemplo, si un ensamblado se descarga de un sitio que no es de confianza, el ensamblado no tendrá ningún permiso de E/S de archivos y, por lo tanto, si este ensamblado intenta acceder a un archivo, generará una excepción que impedirá la llamada.