System.Xml.XmlSecureResolver classe

Observação

Este artigo fornece observações 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, você pode usar um XmlSecureResolver objeto.

XmlSecureResolver envolve-se numa 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 a partir de uma referência de URI (Uniform Resource Identifier) incorporada.

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

Importante

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

Importante

Há diferenças na infraestrutura de segurança para código em execução no CLR (Common Language Runtime) do .NET e para 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 a informação 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 se usa o XmlSecureResolver no CLR integrado do SQL Server, forneça qualquer evidência necessária diretamente utilizando um PermissionSet especificado.

Para usar 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 quando estiver criando 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 tenha permissão para acessar apenas o site da 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 WebPermission objeto.

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. Especifique os URLs aos quais você deseja permitir 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 página de referência de XmlSecureResolver para 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. A XmlSecureResolver chama PermitOnly no criado PermissionSet antes de abrir quaisquer recursos.

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

  • Se você estiver trabalhando em um ambiente totalmente confiável, use seu 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 semiconfiável, tiver código ou dados provenientes de uma fonte externa, souber a origem da fonte externa e tiver 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 semiconfiá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 evidence parâmetro como null. Isso não permite acesso a recursos.

    -ou-

    Se a sua candidatura necessitar de algum acesso a recursos, solicite provas ao autor da chamada.

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 Load método.

    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)