我正在努力建立&开发一个安全POC,这个代码是一个应用程序的一部分,我已经提取到一个较小的应用程序,因为我有一些困难。
String str = "<?xml version=\"1.0\"?><!DOCTYPE foo[<!ELEMENT foo ANY> <!ENTITY word \"A\">]><foo>&word;</foo>";
System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
xDoc.LoadXml(str);
xDoc.Save(@"C:\Temp\xdoc.xml");
考虑xml字符串包含一个DTD实体字,在我的实际xml中引用。加载文档时,我希望DTD能够被处理,因此用我的xml中引用的实体“word”替换字符串“A”。然后将整个文档写回磁盘。但是当我检查xDoc.xml时。实体扩展/替换尚未发生。
为什么不呢?
答案 0 :(得分:1)
您可以在代码中使用的LoadXml
Load
方法中找到以下内容:
此方法不执行DTD或Schema验证。如果你想 要进行验证,请使用
XmlValidatingReader
方法并将其传递给XmlDocument
。有关加载时的示例,请参阅{{1}} 验证
the documentation,The article以及许多其他提供DTD验证的代码示例。