XmlDocument.Load not processing DTD?
本文关键字:DTD processing not Load XmlDocument | 更新日期: 2023-09-27 18:33:09
我正在尝试构建和开发一个安全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时。实体扩展/替换尚未发生。
为什么不呢?
您可以在代码中使用的LoadXml
方法的文档中找到以下内容:
此方法不执行 DTD 或架构验证。如果需要帮助, 要进行验证,请使用
Load
方法并向其传递XmlValidatingReader
.有关加载时间的示例,请参见XmlDocument
验证
本文、本文和许多其他文章提供了 DTD 验证的代码示例。