1

我正在尝试构建和开发安全 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 时。实体扩展/替换没有发生。

为什么不?

4

1 回答 1

2

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

此方法不执行 DTD 或 Schema 验证。如果您希望进行验证,请使用该Load方法并将其传递给 XmlValidatingReader. XmlDocument有关加载时验证的示例,请参见

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

于 2013-10-01T22:56:14.970 回答