You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular项目已实现CSRF防护仍被OWASP ZAP报缺少Anti-CSRF令牌

OWASP ZAP扫描Angular+.NET Core应用误报缺少Anti-CSRF令牌的处理方案

问题表现

  • 基于Angular 9 + .NET Core 3.1技术栈开发的应用,已完成CSRF防护功能开发,实际运行时防护逻辑工作正常
  • 使用OWASP ZAP执行安全扫描后,累计触发30处「Absence of Anti-CSRF Tokens(缺少Anti-CSRF令牌)」告警
  • 所有告警的定位来源均为Angular编译生成的静态脚本文件vendor-es2015.js,甚至部分告警的触发点是该文件内的代码注释行
  • 问题示例截图:
    问题示例截图

根本原因

该问题属于OWASP ZAP默认扫描规则的误报:

  • ZAP的Anti-CSRF检测规则默认会遍历所有HTTP响应的文本内容,只要匹配到表单提交、状态修改请求相关的特征字符,就会判定当前响应缺少CSRF令牌,不会区分内容是实际业务逻辑、第三方依赖代码还是注释内容
  • vendor-es2015.js是Angular构建时打包生成的框架运行时+第三方依赖聚合静态文件,只会被浏览器下载执行,本身不具备接收用户状态修改请求的服务端能力,根本不需要携带CSRF令牌
  • 注释行触发告警的情况是误报的典型特征:注释内容不会被浏览器解析执行,不存在任何CSRF攻击面。

解决步骤

  1. 调整ZAP扫描规则,排除静态资源
    在ZAP的上下文配置中,将静态资源路径加入CSRF检测规则的排除范围,需要排除的内容包括但不限于:
    # Angular构建产物
    /vendor-*.js
    /main-*.js
    /polyfills-*.js
    /runtime-*.js
    /styles-*.css
    # 通用静态资源
    *.js
    *.css
    *.png
    *.jpg
    *.svg
    *.ico
    *.woff2
    
    这类静态资源文件永远不会作为状态修改请求的接收端点,不需要做CSRF令牌校验。
  2. 手动验证CSRF防护实际有效性
    不要完全依赖自动扫描结果判定防护能力,手动验证三个核心逻辑即可确认防护生效:
    • 所有POST/PUT/DELETE/PATCH类状态修改请求,均正常携带预设的CSRF令牌字段
    • 手动删除、篡改请求中的CSRF令牌后,后端接口会直接拒绝请求,返回400或403状态码
    • 构造跨域站点模拟CSRF攻击场景,无有效令牌的请求无法完成业务操作
  3. 标记已有告警为误报
    对已经生成的30条告警,在ZAP告警列表中统一标记为False Positive(误报),避免后续重复扫描时重复提示。

内容的提问来源于stack exchange,提问作者André Castro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:36:35