CodeQL 文档

不安全地读取不受信任的 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

点击查看 CodeQL 代码库中的查询

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

参考

  • ©GitHub 公司
  • 条款
  • 隐私