不安全地读取不受信任的 XML¶
ID: cs/xml/insecure-dtd-handling
Kind: path-problem
Security severity: 9.1
Severity: error
Precision: high
Tags:
- security
- external/cwe/cwe-611
- external/cwe/cwe-827
- external/cwe/cwe-776
Query suites:
- csharp-code-scanning.qls
- csharp-security-extended.qls
- csharp-security-and-quality.qls
XML 文档可以包含文档类型定义 (DTD),DTD 可以定义新的 XML 实体。这些实体可用于执行拒绝服务 (DoS) 攻击,或解析到预期控制范围之外的资源。
建议¶
处理 XML 文档时,除非绝对必要,否则请确保禁用 DTD 处理,如果必须启用,请确保使用安全的解析器。
示例¶
以下示例显示了直接读取到 XmlTextReader
中的 HTTP 请求参数。在当前版本的 .NET Framework 中,默认情况下 XmlTextReader
启用了 DTD 处理。
public class XMLHandler : IHttpHandler
{
public void ProcessRequest(HttpContext ctx)
{
// BAD: XmlTextReader is insecure by default, and the payload is user-provided data
XmlTextReader reader = new XmlTextReader(ctx.Request.QueryString["document"]);
...
}
}
解决方案是将 DtdProcessing
属性设置为 DtdProcessing.Prohibit
。
参考¶
OWASP:XML 外部实体 (XXE) 防范备忘单。
Microsoft 文档:System.XML:安全注意事项。
常见漏洞枚举:CWE-611。
常见漏洞枚举:CWE-827。
常见漏洞枚举:CWE-776。