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

AspNetHostingPermission

Full

High

Medium

Low

Minimal

ConfigurationPermission

Sin restricciones

Sin restricciones

Ningún permiso

Ningún permiso

Ningún permiso

DnsPermission

Sin restricciones

Sin restricciones

Sin restricciones

Ningún permiso

Ningún permiso

EnvironmentPermission

Sin restricciones

Sin restricciones

Read: TEMP, TMP, OS, USERNAME, COMPUTERNAME

Ningún permiso

Ningún permiso

FileIOPermission

Sin restricciones

Sin restricciones

Read, Write, Append, PathDiscovery:Directorio de la aplicación

Read, PathDiscovery:Directorio de la aplicación

Ningún permiso

IsolatedStorageFilePermission

Sin restricciones

Sin restricciones

AssemblyIsolationByUser, Sin restricciones UserQuota

1 MB UserQuota (se puede cambiar para los sitios individuales), AssemblyIsolationByUser

Ningún permiso

PrintingPermission

Sin restricciones

DefaultPrinting

DefaultPrinting

Ningún permiso

Ningún permiso

ReflectionPermission

Sin restricciones

ReflectionEmit

Ningún permiso

Ningún permiso

Ningún permiso

RegistryPermission

Sin restricciones

Sin restricciones

Ningún permiso

Ningún permiso

Ningún permiso

SecurityPermission

Sin restricciones

Execution, Assertion, ControlPrincipal, ControlThread, RemotingConfiguration

Execution, Assertion, ControlPrincipal, ControlThread, RemotingConfiguration

Execution

Execution

SmtpPermission

Sin restricciones

Connect

Connect

Ningún permiso

Ningún permiso

SocketPermission

Sin restricciones

Sin restricciones

Ningún permiso

Ningún permiso

Ningún permiso

WebPermission

Sin restricciones

Sin restricciones

Connect al host de origen (si está configurado)

Ningún permiso

Ningún permiso

SqlClientPermission

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>

Vea también

Otros recursos

Seguridad de aplicaciones Web ASP.NET