首页 > 解决方案 > XElement.Parse && XDocument.Parse 在 c# 中容易受到 XML 注入的影响

问题描述

下面的代码被 fortify 检测为 XML 注入。请有人帮我解决这个问题。

LockUserXml(string xml)
{
   var doc = XDocument.Parse(xml);
   ..
   ..
}

LocalUserXml(XmlElement root, ExportXmlParameter param)
{
   XElement rootElement = XElement.Parse(root.OuterXml);
   ..
   ..
   ..
}

标签: c#asp.netasp.net-mvcfortify

解决方案


来自微软文档

如何修复 XML 违规

  • 不要编写原始 XML。相反,使用对其输入进行 XML 编码的方法或属性。

  • 或者,在编写原始 XML 之前对输入进行 XML 编码。

  • 或者,通过使用 sanitizers 进行原始类型转换和 XML 编码来验证用户输入

您可以做的是使用Load而不是Parse配置阅读器设置(请参阅XmlReaderSettings),如下所示:

LockUserXml(string xml)
{
   var xmlReader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings() { XmlResolver = null });
   var doc = XDocument.Load(xmlReader);
   ..
   ..
}

另请参阅如何防止 XXE 攻击(.net 中的 XmlDocument)


推荐阅读