Code Access Security (CAS), en el marco Microsoft .NET , es la solución de Microsoft para evitar que el código no confiable realice acciones privilegiadas. Cuando el CLR carga un ensamblado , obtendrá evidencia del ensamblado y la usará para identificar el grupo de código al que pertenece el ensamblado. Un grupo de código 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 el CLR recorra la pila de llamadas y examine el conjunto de permisos otorgado al ensamblado de cada método en la pila de llamadas. Los grupos de códigos y los conjuntos de permisos los determina el administrador de la máquina que define la política de seguridad. Microsoft considera que CAS es obsoleto y desaconseja su uso. [1] Tampoco está disponible en .NET Core y .NET.
La evidencia puede ser cualquier información asociada con un ensamblado. Las evidencias predeterminadas que utiliza la seguridad de acceso al código .NET son:
Un desarrollador puede usar evidencia personalizada (la llamada evidencia de ensamblaje), pero esto requiere escribir un ensamblaje de seguridad y en la versión 1.1 [ aclaración necesaria ] 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# , la evidencia se puede obtener mediante la siguiente cláusula de código:
este . GetType () . Ensamblado . 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 ensambles dentro de ese grupo. Existen cuatro políticas en .NET:
Las primeras tres políticas se almacenan en archivos XML y se administran mediante 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 ensamblaje a 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 ensamblaje.
De manera predeterminada, las políticas Enterprise, User y AppDomain otorgan plena confianza (es decir, permiten que todos los conjuntos tengan todos los permisos) y la política Machine es más restrictiva. Dado que se toma la intersección, esto significa que el conjunto de permisos final está determinado por la política Machine.
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 pieza de evidencia con un conjunto de permisos con nombre. El administrador utiliza la herramienta de configuración de .NET para especificar un tipo particular de evidencia (por ejemplo, Sitio) y un valor particular para esa evidencia (por ejemplo, www.misitio.com) y luego identifica el conjunto de permisos que se le otorgará al grupo de códigos.
El código que realiza alguna acción privilegiada solicitará uno o más permisos. La solicitud hace que el CLR recorra la pila de llamadas y, para cada método, el CLR se asegurará de que los permisos solicitados se encuentren en los permisos otorgados al 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 se descarga un ensamblado de un sitio que no es de confianza, el ensamblado no tendrá ningún permiso de E/S de archivo y, por lo tanto, si este ensamblado intenta acceder a un archivo, generará una excepción que impedirá la llamada.