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时。实体扩展/替换尚未发生。

为什么不呢?

XmlDocument.Load not processing DTD?

您可以在代码中使用的LoadXml方法的文档中找到以下内容:

此方法不执行 DTD 或架构验证。如果需要帮助, 要进行验证,请使用 Load 方法并向其传递 XmlValidatingReader .有关加载时间的示例,请参见XmlDocument 验证

本文、本文和许多其他文章提供了 DTD 验证的代码示例。