我想检查更好的方法来检查包含外部资源的XML文档。 我在veracode分析期间收到了这个错误。 配置XML解析器以禁用外部实体解析。
我可以将XMLResolve设置为null,但我们也依赖于第三方dll。所以,我想验证xml是否包含任何外部资源并立即拒绝该文件。
我们不会将DTD用于XML文档。 所以这里有两个我能想到的选择。我想两者几乎都是一样的。只是想确定我是否遗漏了任何东西。
//Check for DTD element in XML, if it contains, ignore this document.
public bool IsValid(string xml)
{
if (xml.Contains("<!DOCTYPE"))
{
return false;
}
return true;
}
或
public bool IsValid(string xml)
{
XmlReaderSettings xs = new XmlReaderSettings() {DtdProcessing = DtdProcessing.Prohibit};
try
{
XmlReader.Create(xml, xs);
return true;
}
catch (Exception ex)
{
return false;
}
}
此外,这只会解决DTD,我们如何检查实体和模式等其他外部资源?检查所有外部实体的过程是什么?谢谢你的帮助。