Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O método System.Xml.XmlSecureResolver.GetEntity(Uri, String, Type) lança incondicionalmente um XmlException em tempo de execução. Se a sua aplicação utilizar XmlSecureResolver e tentar resolver um recurso XML através dele, a resolução falhará com uma exceção.
Além disso, o tipo System.Xml.XmlSecureResolver todo é obsoleto. Todas as referências a este tipo resultarão num aviso SYSLIB0047 durante a compilação. Se tiveres ativado avisos como erros, isso causará uma quebra de build se o teu aplicativo fizer referência a XmlSecureResolver.
using System.Xml;
// Compiler warning SYSLIB0047: XmlSecureResolver type is obsolete.
XmlResolver resolver = new XmlSecureResolver(
resolver: new XmlUrlResolver(),
securityUrl: "https://www.example.com/");
// Call to XmlSecureResolver.GetEntity below throws XmlException at run time.
object entity = resolver.GetEntity(
absoluteUri: new Uri("https://www.example.com/some-entity"),
role: null,
ofObjectToReturn: null);
Comportamento anterior
No .NET Framework, XmlSecureResolver.GetEntity(Uri, String, Type) constrói uma área restrita CAS (Segurança de Acesso ao Código) para restringir o processo de resolução de recursos XML externos. Se a política for violada, um SecurityException é lançado.
No .NET Core 3.1 e no .NET 6, XmlSecureResolver.GetEntity(Uri, String, Type) não restringe a resolução de recursos XML externos. A resolução de recursos externos pode prosseguir sem limitações.
Novo comportamento
A partir do .NET 7, XmlSecureResolver.GetEntity(Uri, String, Type) lança incondicionalmente um XmlException. Não constrói uma sandbox CAS e não tenta resolver o recurso externo.
Versão introduzida
.NET 7
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade de origem e a compatibilidade binária.
Motivo da mudança
Essa alteração melhora a segurança do ecossistema .NET. Essa obsolescência move o comportamento de XmlSecureResolver fail-dangerous (sempre executar resolução) para fail-safe (nunca executar resolução) ao executar no .NET 7 ou posterior.
Ação recomendada
Em vez disso, considere usar a propriedade XmlResolver.ThrowingResolverestática recém-introduzida. Esta propriedade fornece uma XmlResolver instância que impede a resolução de recursos externos.
using System.Xml;
// BAD: Do not use XmlSecureResolver.
// XmlResolver resolver = new XmlSecureResolver(
// resolver: new XmlUrlResolver(),
// securityUrl: "https://www.example.com/");
// GOOD: Use XmlResolver.ThrowingResolver instead.
XmlResolver resolver = XmlResolver.ThrowingResolver;