Seguridad de acceso a código de ASP.NET
Actualización: noviembre 2007
Una de las ventajas de utilizar ASP.NET para alojar varios sitios Web es la compatibilidad de Common Language Runtime (CLR) con la seguridad de acceso a código para ayudar a proteger las aplicaciones de servidor. Se asigna código a una clasificación de zonas de seguridad basándose en pruebas referentes al origen del código, como un ensamblado con nombre seguro o la dirección URL de origen.
Las aplicaciones que se ejecutan con plena confianza también pueden estar restringidas por los permisos de los archivos NTFS, los permisos de la base de datos, etc. al utilizar la cuenta de Windows (identidad del proceso ASP.NET) bajo el que se están ejecutando. Para obtener más información, vea Configurar la identidad de procesos en ASP.NET.
En general, puede configurar la seguridad de acceso a código para un ensamblado individual convirtiéndolo en un ensamblado de nombre seguro y agregando la directiva de seguridad para ese ensamblado. Sin embargo, muchos ensamblados de ASP.NET se generan dinámicamente durante la compilación de la página y por lo tanto no tienen un nombre seguro, por lo que debe configurar la directiva de seguridad para esos ensamblados indirectamente. Además, dado que ASP.NET admite aplicaciones sin compilación, no se admiten evidencias basadas en ensamblado. Puesto que las aplicaciones ASP.NET incluyen el concepto de las estructuras de directorio, resulta mucho más fácil configurar la seguridad de acceso a código basándose en las categorías de las aplicaciones ASP.NET en lugar de configurar manualmente .NET Framework para que funcione de manera independiente con cada aplicación ASP.NET en un equipo.
Para cada aplicación, ASP.NET le permite asignar un nivel de confianza configurable que corresponde a un conjunto predefinido de permisos. De forma predeterminada, a las aplicaciones se les asigna un nivel de confianza según la evidencia que presentan. Si desea ejecutar una aplicación Web con un nivel de confianza inferior a Full, debe utilizar uno de los niveles de confianza predefinidos y que están definidos en Niveles de confianza y archivos de directivas de ASP.NET para imponer una directiva de confianza parcial.
Puede utilizar los siguientes valores de configuración en el archivo Web.config de la aplicación para reemplazar el comportamiento predeterminado y asociar una aplicación a una determinada directiva de seguridad.
<location path="SampleApp" allowOverride="false">
<trust level="High"
originUrl="https://www.contoso.com"/>
</location>
El elemento de configuración trust puede aplicarse al nivel de equipo (en cuyo caso, cada aplicación ASP.NET se ejecuta en ese nivel de confianza) o a cualquier directorio raíz de la aplicación en la jerarquía (en cuyo caso, el nivel de confianza se aplica a la aplicación ASP.NET específica). Si desea establecer una directiva para todo el sitio, edite el archivo Web.config para la aplicación raíz del sitio y especifique la raíz del sitio como la ubicación de la ruta de acceso, como en el siguiente ejemplo:
<location path="ContosoSite" allowOverride="false">
<trust level="High"
originUrl="https://www.contoso.com"/>
</location>
Se recomienda establecer el valor del atributo level del elemento de configuración trust en High para los sitios de confianza. Para los sitios que no sean de confianza, como un servidor Web que aloje sitios en los que se ejecute código de un cliente externo, se recomienda establecer el valor del atributo level del elemento de configuración trust en Medium. Para obtener una descripción detallada de cómo ejecutar las aplicaciones ASP.NET con un nivel de confianza medio, vea (en inglés) "How To: Use Medium Trust in ASP.NET 2.0" en Patterns and Practices (PAG): Security Guidance for Applications.
Si se configuran los valores de confianza en el nivel de equipo o sitio, normalmente se establece el valor del atributo allowOverride en false en el elemento location para que las aplicaciones individuales no puedan especificar su propio nivel de confianza. Esto se suele hacer en instalaciones del servidor compartidas.
La siguiente tabla recoge los atributos compatibles predeterminados para el elemento de configuración trust.
Atributo |
Descripción |
Valores admitidos |
---|---|---|
level |
Especifica la zona de seguridad en la que se ejecutará la aplicación. |
Full, High, Medium, Low y Minimal. |
originUrl |
Especifica una dirección URL o un modelo de direcciones URL que se permite para el acceso mediante clases en el espacio de nombres System.Net. Si está presente, este atributo puede utilizarse para comprobar los permisos de algunos objetos, como una instancia de WebRequest, que permiten la conectividad con varias ubicaciones de red. Por ejemplo, se puede configurar este atributo con el nombre de host de los servidores en una batería de servidores Web de modo que las páginas ASP.NET puedan llamar a los servicios Web implementados en la misma batería de servidores Web que la aplicación Web. |
Direcciones URL HTTP correctas o sintaxis basada en regex que admite el atributo WebPermissionAttribute. |
La siguiente tabla muestra los tipos de permiso que admite CLR y la directiva predeterminada para cada permiso según los distintos niveles de confianza.
Permiso |
Full |
High |
Medium |
Low |
Minimal |
---|---|---|---|---|---|
Full |
High |
Medium |
Low |
Minimal |
|
Sin restricciones |
Sin restricciones |
Ningún permiso |
Ningún permiso |
Ningún permiso |
|
Sin restricciones |
Sin restricciones |
Sin restricciones |
Ningún permiso |
Ningún permiso |
|
Sin restricciones |
Sin restricciones |
Read: TEMP, TMP, OS, USERNAME, COMPUTERNAME |
Ningún permiso |
Ningún permiso |
|
Sin restricciones |
Sin restricciones |
Read, Write, Append, PathDiscovery:Directorio de la aplicación |
Read, PathDiscovery:Directorio de la aplicación |
Ningún permiso |
|
Sin restricciones |
Sin restricciones |
AssemblyIsolationByUser, Sin restricciones UserQuota |
1 MB UserQuota (se puede cambiar para los sitios individuales), AssemblyIsolationByUser |
Ningún permiso |
|
Sin restricciones |
Ningún permiso |
Ningún permiso |
|||
Sin restricciones |
Ningún permiso |
Ningún permiso |
Ningún permiso |
||
Sin restricciones |
Sin restricciones |
Ningún permiso |
Ningún permiso |
Ningún permiso |
|
Sin restricciones |
Execution, Assertion, ControlPrincipal, ControlThread, RemotingConfiguration |
Execution, Assertion, ControlPrincipal, ControlThread, RemotingConfiguration |
|||
Sin restricciones |
Ningún permiso |
Ningún permiso |
|||
Sin restricciones |
Sin restricciones |
Ningún permiso |
Ningún permiso |
Ningún permiso |
|
Sin restricciones |
Sin restricciones |
Connect al host de origen (si está configurado) |
Ningún permiso |
Ningún permiso |
|
Sin restricciones |
Sin restricciones |
Sin restricciones |
Ningún permiso |
Ningún permiso |
|
Registro de eventos |
Sin restricciones |
Ningún permiso |
Ningún permiso |
Ningún permiso |
Ningún permiso |
Cola de mensajes |
Sin restricciones |
Ningún permiso |
Ningún permiso |
Ningún permiso |
Ningún permiso |
Controlador de servicio |
Sin restricciones |
Ningún permiso |
Ningún permiso |
Ningún permiso |
Ningún permiso |
Contadores de rendimiento |
Sin restricciones |
Ningún permiso |
Ningún permiso |
Ningún permiso |
Ningún permiso |
Servicio de directorio |
Sin restricciones |
Ningún permiso |
Ningún permiso |
Ningún permiso |
Ningún permiso |
Cuando un nivel de permiso está disponible pero no se menciona explícitamente en la directiva de seguridad, las aplicaciones que se ejecutan con permisos Full siempre pueden utilizarlo. Las aplicaciones que se ejecutan con niveles de confianza más bajos no podrán utilizar los recursos a menos que les conceda permisos explícitos modificando la directiva de seguridad.
Como se muestra en la tabla, las aplicaciones con permiso High establecen permiso de lectura/escritura para los archivos en los directorios de sus aplicaciones y las aplicaciones de confianza Low tienen permisos de solo lectura para los archivos en los directorios de sus aplicaciones. Dado que el tipo FileIOPermission depende de una ruta de acceso física (por ejemplo, c:\SampleAppPath), ASP.NET utiliza una instrucción con símbolos (token) en los archivos de directivas que se reemplaza en tiempo de ejecución con información de ruta de acceso relevante para la aplicación.
El tipo WebPermission permite que la aplicación se conecte a la ubicación de red definida por el atributo de host original, utilizando clases como System.Net.WebRequest. En ASP.NET, puede configurar este permiso proporcionando un atributo originUrl opcional en la sección trust para una aplicación determinada. El atributo originUrl reemplaza a la variable $OriginHost$ en archivos de directivas, como se muestra en la sección siguiente del archivo Web_hightrust.config:
<IPermission class="WebPermission" version="1">
<ConnectAccess>
<URI uri="$OriginHost$"/>
</ConnectAccess>
</IPermission>