Niveles de confianza y archivos de directivas de ASP.NET

Actualización: noviembre 2007

Los niveles de confianza se asocian a los archivos de directivas mediante el elemento de configuración <securityPolicy>, que sólo es válido en un archivo de configuración (Web.config) en el nivel de sitio. Para agregar o quitar niveles de confianza, agregue entradas a la sección de configuración que especifica el nombre del nivel de confianza y el archivo de directivas que desee utilizar. Los archivos de confianza predeterminados se instalan en el directorio Config bajo la carpeta que contiene el archivo Aspnet_isapi.dll. Se trata de la misma ubicación que se utiliza para el archivo de configuración Machine.config y el archivo de directivas de seguridad en tiempo de ejecución.

El nivel de confianza Full es un caso especial. Dado que es totalmente equivalente al hecho de tener plena confianza en la zona del equipo local, el host de ASP.NET no aplica ninguna directiva adicional a estas aplicaciones. Por tanto, el nivel de confianza Full se asigna a un controlador interno y ASP.NET no agrega ninguna directiva adicional al dominio de aplicación para las aplicaciones de plena confianza.

En el ejemplo siguiente se muestra la sección securityPolicy de un archivo de configuración que asigna los niveles de confianza a diversos archivos de directivas.

<system.web>
    <securityPolicy>
    <trustLevel name="Full"    policyFile="internal"/>
    <trustLevel name="High"    policyFile="web_hightrust.config"/>
    <trustLevel name="Medium"  policyFile="web_mediumtrust.config"/>
    <trustLevel name="Low"     policyFile="web_lowtrust.config"/>
    <trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
    </securityPolicy>
</system.web>

Si no desea que las aplicaciones puedan especificar su propio nivel de confianza, se puede especificar una directiva <location> y establecer el atributo allowOverride en false. Podría hacer esto en unservidor que aloje varias aplicaciones y que necesite limitar el nivel de confianza de las aplicaciones alojadas.

Modificar archivos de niveles de confianza

Puede modificar los archivos de directivas o crear nuevos archivos con conjuntos de permisos personalizados. Por ejemplo, puede copiar el contenido del archivo Web_hightrust.config y asignar permiso para establecer conexiones OLEDB agregando en primer lugar la clase OleDbPermission a la sección SecurityClasses del archivo de directivas, tal y como se muestra en el siguiente ejemplo de código.

<SecurityClass Name="OleDbPermission" 
    Description="System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0, 
    Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

A continuación, puede definir los parámetros de la clase OleDbPermission especificada, incluidas las restricciones para las cadenas de conexión OLEDB. Después, puede especificar qué conjuntos de permisos incluyen la clase de seguridad OleDbPermission agregando un elemento IPermission al elemento PermissionSet con un nombre de ASP.NET en el archivo de directivas de confianza. En el siguiente ejemplo de código se especifica que la única conexión OLEDB permitida concederá acceso no restringido a la base de datos Catalog.mdb de Access.

<PermissionSet
  class="NamedPermissionSet"
  version="1"
  Name="ASP.Net">
  <IPermission
    class="OleDbPermission"
    version="1"
    Unrestricted="true" />
</PermissionSet>

Algunos permisos, como OleDbPermission, permiten especificar restricciones adicionales que limitan el acceso concedido o denegado. Por ejemplo, el permiso OleDbPermission permite conceder acceso para establecer conexiones mediante el proveedor de datos de .NET Framework para OLE DB, pero con restricciones para las cadenas de conexión OLEDB. En el ejemplo de código siguiente se especifica que se permiten las únicas conexiones OLEDB permitidas a las bases de datos de Access.

<IPermission class="OleDbPermission" version="1">
    <add ConnectionString=
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\access_data\catalog.mdb""
        KeyRestrictions=""data source=;user id=;password=;" 
        KeyRestrictionBehavior="AllowOnly"/>
</IPermission>

Puede guardar el archivo de directivas de confianza y colocarlo en lugar del actual archivo Web_hightrust.config, o bien, puede crear un nuevo archivo de directivas de confianza y especificar que es el archivo de directivas para el nivel de confianza High, o bien, crear un nuevo nivel de confianza, tal y como se muestra en el siguiente ejemplo de código.

    <trustLevel name="HighCustom"
    policyFile="web_highcustom.config"/>

Para conservar la configuración predeterminada, ASP.NET incluye dos copias de cada archivo que contiene la configuración del nivel de confianza. Una copia lleva la extensión .config, tal y como se indicó en la sección de configuración anterior. El archivo .config contiene la configuración que utiliza el sistema para cada nivel de confianza. La segunda copia lleva la extensión .config.default y contiene la configuración predeterminada del nivel de confianza correspondiente. Si la configuración del nivel de confianza actual ha sido modificada y desea restaurar la configuración predeterminada, puede reemplazar el contenido del archivo .config con el contenido del archivo .config.default.

Para obtener una descripción más detallada de la administración de un archivo de directivas de confianza, vea "How To: Use Medium Trust in ASP.NET 2.0" en Patterns and Practices (PAG): Security Guidance for Applications (en inglés).

Vea también

Conceptos

Mecánica de las directivas de ASP.NET

Otros recursos

Seguridad de aplicaciones Web ASP.NET