【问题标题】:XDocument.Parse: Avoid replacing XXE referencesXDocument.Parse:避免替换 XXE 引用
【发布时间】:2016-01-20 05:06:06
【问题描述】:

我正在尝试防止我的应用处理的 XML 中的恶意 XXE 注入。因此我使用 XDocument 而不是 XmlDocument。

XML 表示 Web 请求的负载,因此我在其字符串内容上调用 XDocument.Parse。但是,我看到 XML (&XXE) 中包含的 XXE 引用在结果中被 ENTITY xxe 的实际值替换。

是否可以在不替换 &xxe 的情况下使用 XDocument 解析 XML?

谢谢

编辑: 我设法避免在 XML 中使用 XmlResolver=null 替换 XDocument.Load 中的 xxes

【问题讨论】:

    标签: c# xml linq-to-xml xxe


    【解决方案1】:

    使用以下示例停止解析 XXE(模式和 DTD)。

    Dim objXmlReader As System.Xml.XmlTextReader = Nothing
    objXmlReader = New System.Xml.XmlTextReader(_patternFilePath)
    objXmlReader.XmlResolver = Nothing
    patternDocument = XDocument.Load(objXmlReader)
    

    【讨论】:

      【解决方案2】:

      尝试将Load 与预先配置的阅读器一起使用,而不是Parse

      var xdoc = XDocument.Load(new XmlTextReader(
          new StringReader(xmlContent)) { EntityHandling = EntityHandling.ExpandCharEntities });
      

      来自 MSDN:

      当 EntityHandling 设置为 ExpandCharEntities 时,读取器扩展字符实体并将一般实体作为 EntityReference 节点返回。

      【讨论】:

      • 我不想扩展实体,那意味着我被注入了。
      • 这将只扩展字符实体,例如A,但保留任何其他实体,例如&XEE;。至少,XmlReader 将返回 XmlNodeType.EntityReference 而不是文本。请参阅此处的备注:msdn.microsoft.com/en-us/library/…
      猜你喜欢
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      相关资源
      最近更新 更多