Compartilhar via


Classe System.Xml.XmlSecureResolver

Este artigo fornece comentários complementares à documentação de referência para esta API.

A XmlUrlResolver classe é o resolvedor padrão para todas as classes no System.Xml namespace. Ele é usado para carregar documentos XML e resolver recursos externos, como entidades, DTDs ou esquemas, e importar ou incluir diretivas.

Você pode substituir esse padrão especificando o XmlResolver objeto a ser usado. Por exemplo, se você quiser restringir os recursos que o subjacente XmlResolver pode acessar, poderá usar um XmlSecureResolver objeto.

XmlSecureResolver envolve uma implementação concreta de XmlResolver e restringe os recursos aos quais o subjacente XmlResolver tem acesso. Por exemplo, XmlSecureResolver tem a capacidade de proibir o redirecionamento entre domínios, que ocorre de uma referência de URI (Uniform Resource Identifier) inserida.

Ao construir um XmlSecureResolver objeto, você fornece uma implementação válida XmlResolver junto com uma URL, uma instância de um objeto de evidência ou um conjunto de permissões, que é usado pelo XmlSecureResolver para determinar a segurança. Um System.Security.PermissionSet é gerado ou o existente é utilizado e o PermissionSet.PermitOnly é chamado nele para ajudar a proteger o XmlResolver subjacente.

Importante

XmlSecureResolver os objetos podem conter informações confidenciais, como credenciais de usuário. Tenha cuidado ao armazenar objetos em cache XmlSecureResolver e não passe o objeto XmlSecureResolver para um componente não confiável.

Importante

Há diferenças na infraestrutura de segurança para o código em execução no CLR (Common Language Runtime) do .NET e no código em execução no CLR integrado ao Microsoft SQL Server 2005. Isso pode levar a casos em que o código desenvolvido para o CLR do .NET opera de forma diferente quando usado no CLR integrado do SQL Server. Uma dessas diferenças afeta a XmlSecureResolver classe quando você tem evidências baseadas em uma URL (ou seja, quando você usa o CreateEvidenceForUrl(String) método ou o XmlSecureResolver construtor). O mecanismo de resolução de política do CLR integrado do SQL Server não usa as informações Url ou Zone. Em vez disso, ele concede permissões com base no GUID que o servidor adiciona quando os assemblies são carregados. Quando você usar o XmlSecureResolver no CLR integrado do SQL Server, forneça qualquer evidência necessária diretamente usando um PermissionSet especificado.

Para utilizar um resolvedor seguro

  1. Crie um XmlSecureResolver com o conjunto de permissões correto.

  2. Crie um XmlReaderSettings objeto que use o XmlSecureResolver objeto.

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
  3. Passe o XmlReaderSettings objeto para o Create método ao criar o XmlReader objeto.

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

Para restringir o acesso usando uma URL

Use o XmlSecureResolver(XmlResolver, String) construtor para criar um XmlSecureResolver objeto que pode acessar apenas o site da sua intranet local.

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

Para restringir o acesso usando um conjunto de permissões

  1. Crie um objeto WebPermission.

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. Especifique as URLs às quais você deseja permitir o acesso.

    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. Adicione as permissões da Web ao PermissionSet objeto.

    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
  4. Use o XmlSecureResolver(XmlResolver, PermissionSet) construtor para criar um XmlSecureResolver objeto usando o conjunto de permissões.

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

    Consulte a XmlSecureResolver página de referência para obter outro exemplo.

Para restringir o acesso usando evidências

Você pode restringir o acesso usando o XmlSecureResolver(XmlResolver, Evidence) construtor e especificando Evidence. O Evidence é usado para criar o PermissionSet que é aplicado ao subjacente XmlResolver. XmlSecureResolver chama PermitOnly em PermissionSet criado antes de abrir qualquer recurso.

Aqui estão alguns cenários comuns e o tipo de evidência a ser fornecido para cada um:

  • Se você estiver trabalhando em um ambiente totalmente confiável, use o assembly para criar a evidência:

    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)
    
  • Se você estiver trabalhando em um ambiente semi-confiável, terá código ou dados provenientes de uma fonte externa e sabe a origem da origem externa e tem um URI verificável, use o URI para criar a evidência:

    
    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)
    
  • Se você estiver trabalhando em um ambiente semi-confiável e tiver código ou dados provenientes de uma fonte externa, mas também não souber a origem da fonte externa:

    Defina o parâmetro de evidence a null. Isso não permite acesso a recursos.

    - ou -

    Se o aplicativo exigir algum acesso aos recursos, solicite evidências do chamador.

Para usar o resolvedor seguro para carregar uma folha de estilos XSLT

  1. Crie um XmlSecureResolver com o conjunto de permissões correto.

  2. Passe o XmlSecureResolver para o 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)