Compartir a través de


Clase System.Xml.XmlSecureResolver

En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.

La XmlUrlResolver clase es la resolución predeterminada para todas las clases del System.Xml espacio de nombres. Se usa para cargar documentos XML y para resolver recursos externos, como entidades, DTD o esquemas, e importar o incluir directivas.

Puede invalidar este valor predeterminado especificando el XmlResolver objeto que se va a usar. Por ejemplo, si desea restringir los recursos a los que puede acceder el subyacente XmlResolver , puede usar un XmlSecureResolver objeto .

XmlSecureResolver rodea a una implementación concreta de XmlResolver y restringe los recursos a los que el XmlResolver subyacente tiene acceso. Por ejemplo, XmlSecureResolver tiene la capacidad de prohibir el redireccionamiento entre dominios, que se produce desde una referencia insertada de identificador uniforme de recursos (URI).

Al construir un objeto XmlSecureResolver, proporcionas una implementación XmlResolver válida junto con una dirección URL, una instancia de un objeto de evidencia o un conjunto de permisos, que el XmlSecureResolver usa para determinar la seguridad. Se genera un System.Security.PermissionSet o se usa el existente y PermissionSet.PermitOnly se llama a en él para ayudar a proteger el XmlResolver subyacente.

Importante

XmlSecureResolver los objetos pueden contener información confidencial, como las credenciales de usuario. Debe tener cuidado al almacenar objetos XmlSecureResolver en caché y no debe pasar el objeto XmlSecureResolver a un componente que no es de confianza.

Importante

Existen diferencias en la infraestructura de seguridad para el código que se ejecuta en Common Language Runtime (CLR) de .NET y en el código que se ejecuta en CLR que se integra en Microsoft SQL Server 2005. Esto puede provocar casos en los que el código desarrollado para .NET CLR funciona de forma diferente cuando se usa en CLR integrado de SQL Server. Una de estas diferencias afecta a la XmlSecureResolver clase cuando tiene evidencia que se basa en una dirección URL (es decir, cuando se usa el CreateEvidenceForUrl(String) método o el XmlSecureResolver constructor). El mecanismo de resolución de directivas del CLR integrado de SQL Server no usa la información de Url o Zone. En su lugar, concede permisos basados en el GUID, que el servidor agrega cuando se cargan los ensamblados. Cuando usted utiliza XmlSecureResolver en el CLR integrado de SQL Server, proporcione cualquier evidencia necesaria directamente utilizando un PermissionSet especificado.

Para usar un resolver seguro

  1. Cree un XmlSecureResolver con el conjunto de permisos correcto.

  2. Cree un XmlReaderSettings objeto que use el XmlSecureResolver objeto .

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
  3. Pase el XmlReaderSettings objeto al Create método al crear el XmlReader objeto .

    XmlReader reader = XmlReader.Create("books.xml", settings);
    
    Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
    

Para restringir el acceso mediante una dirección URL

Use el XmlSecureResolver(XmlResolver, String) constructor para crear un XmlSecureResolver objeto que solo tenga permiso para acceder al sitio de intranet local.

XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), "http://myLocalSite/");
Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), "http://myLocalSite/")

Para restringir el acceso mediante un conjunto de permisos

  1. Cree un objeto WebPermission.

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. Especifique las direcciones URL a las que desea permitir el acceso.

    myWebPermission.AddPermission(NetworkAccess.Connect, "http://www.contoso.com/");
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/");
    
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://www.contoso.com/")
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/")
    
  3. Agregue los permisos web al PermissionSet objeto .

    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
  4. Use el XmlSecureResolver(XmlResolver, PermissionSet) constructor para crear un XmlSecureResolver objeto mediante el conjunto de permisos.

    XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myPermissions);
    
    Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myPermissions)
    

    Consulte la XmlSecureResolver página de referencia para obtener otro ejemplo.

Para restringir el acceso mediante pruebas

Puede restringir el acceso mediante el XmlSecureResolver(XmlResolver, Evidence) constructor y especificando Evidence. Evidence se usa para crear el PermissionSet que se aplica al subyacente XmlResolver. XmlSecureResolver llama a PermitOnly en el PermissionSet creado antes de abrir cualquier recurso.

Estos son algunos escenarios comunes y el tipo de evidencia que se debe proporcionar para cada uno:

  • Si trabaja en un entorno de plena confianza, use el ensamblado para crear la evidencia:

    Evidence myEvidence = this.GetType().Assembly.Evidence;
    XmlSecureResolver myResolver;
    myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
    
    Dim myEvidence As Evidence = Me.GetType().Assembly.Evidence
    Dim myResolver As XmlSecureResolver
    myResolver = New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
    
  • Si trabaja en un entorno de confianza parcial, tiene código o datos procedentes de un origen externo y conoce el origen del origen externo y tiene un URI verificable, use el URI para crear la evidencia:

    
    Evidence myEvidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI);
    XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
    
    Dim myEvidence As Evidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI)
    Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
    
  • Si trabaja en un entorno de confianza parcial y tiene código o datos procedentes de una fuente externa, pero tampoco conoce su procedencia, entonces:

    Establezca el parámetro evidence en null. Esto no permite el acceso a los recursos.

    -o-

    Si la aplicación requiere algún acceso a los recursos, solicite evidencia del autor de la llamada.

Para usar el resolver seguro para cargar una hoja de estilos XSLT

  1. Cree un XmlSecureResolver con el conjunto de permisos correcto.

  2. Pase el XmlSecureResolver al método Load.

    XslCompiledTransform xslt = new XslCompiledTransform();
    xslt.Load("http://serverName/data/xsl/sort.xsl", null, myResolver);
    
    Dim xslt As New XslCompiledTransform()
    xslt.Load("http://serverName/data/xsl/sort.xsl", Nothing, myResolver)