查看此处解析的 XML 是不是来自受信任的来源,否则将 settings.DtdProcessing 设置为 System.Xml.DtdProcessing.Prohibit 或 .Ignore
Posted
技术标签:
【中文标题】查看此处解析的 XML 是不是来自受信任的来源,否则将 settings.DtdProcessing 设置为 System.Xml.DtdProcessing.Prohibit 或 .Ignore【英文标题】:Review that the XML parsed here is from a trusted source, otherwise set settings.DtdProcessing to System.Xml.DtdProcessing.Prohibit or .Ignore查看此处解析的 XML 是否来自受信任的来源,否则将 settings.DtdProcessing 设置为 System.Xml.DtdProcessing.Prohibit 或 .Ignore 【发布时间】:2019-09-04 15:48:08 【问题描述】:规则: 不允许 XmlTextReader 上的 Dtd
类别: Microsoft.Security.Xml
检查 ID: CA3054
规则说明: 在不受信任的源上使用 XmlTextReader 时禁止 DTD 处理。在 XML 阅读器上启用 DTD 处理并使用 UrlResolver 解析外部 XML 实体可能会导致信息泄露。来自文件系统或网络共享的内容 处理 XML 的机器可能会暴露给攻击者。此外,攻击者可以将其用作 DoS 向量。
规则文件: securityxmlrules.dll [14.0.0.0]
帮助: http://go.microsoft.com/fwlink/?LinkId=282614&clcid=0x409
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Prohibit;
StringReader stringReader = new StringReader(xml);
XmlTextReader reader = new XmlTextReader(stringReader);
XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlAttributeCollection attrs = doc.DocumentElement.Attributes;
if (!string.IsNullOrWhiteSpace(cookie))
string pagingcookie = GetPagingCookie(cookie);
if (!string.IsNullOrWhiteSpace(pagingcookie))
XmlAttribute pagingAttr = doc.CreateAttribute("paging-cookie");
pagingAttr.Value = pagingcookie;
attrs.Append(pagingAttr);
如何为 SDL 解决这个 FxCop
【问题讨论】:
【参考方案1】:您创建了一个设置对象,但您的 XmlReader 实际上并未使用它。您需要使用设置创建一个 XmlReader。
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Prohibit;
StringReader stringReader = new StringReader(xml);
XmlReader reader = XmlReader.Create(stringReader, settings);
【讨论】:
以上是关于查看此处解析的 XML 是不是来自受信任的来源,否则将 settings.DtdProcessing 设置为 System.Xml.DtdProcessing.Prohibit 或 .Ignore的主要内容,如果未能解决你的问题,请参考以下文章
使用 SnakeYAML 从不受信任的来源加载 YAML 文件时会发生啥?
添加受信任的提供者 (SAML 2.0) 时遇到问题:无法解析我的服务提供者元数据