Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 285

CSRF 令牌

审核人Cybersecurity entrepreneur & security researcher

CSRF 令牌 是什么?

CSRF 令牌嵌入表单或请求头中、每个会话唯一且不可预测的值,使服务器能确认状态变更请求来自本站页面。


CSRF 令牌是对抗跨站请求伪造的标准防御手段,该攻击在 OWASP Top 10 2013 中被列为 A05,并在后续版本中被并入"失效的访问控制"。服务器生成一个密码学随机值,将其与用户会话绑定,并嵌入 HTML 表单或通过自定义请求头暴露出来。由于同源策略使攻击者的页面无法读取该令牌,伪造的跨站请求无法提供正确的值,因而会被拒绝。

主要有三种模式。同步令牌模式在服务端存储期望值——最稳健但有状态。双重提交 Cookie将一个 Cookie 与匹配的表单字段或请求头比对,无需服务端状态,但如果攻击者能通过子域写入 Cookie 则存在风险。签名(HMAC)双重提交将令牌与会话绑定,以弥补这一缺口。令牌必须是每会话唯一的(对敏感操作则每请求唯一)、足够长,并以恒定时间进行比较。

纵深防御很重要:自 Chrome 80(2020 年 2 月)起,未标记的 Cookie 默认为 SameSite=Lax,这能拦截大多数跨站 POST 请求,但 Lax 仍允许顶级 GET 导航,而且并非所有浏览器都强制执行——因此令牌仍然是必要的。应将其与 Origin/Referer 校验以及严格的 CORS 配合使用。仅通过 JavaScript 调用的 bearer 令牌 API 避免使用环境 Cookie,通常不需要 CSRF 令牌,但仍需防重放和授权控制。

flowchart TD
  A[用户加载表单] --> B[服务器签发与会话绑定的 CSRF 令牌]
  B --> C[令牌置于隐藏字段或自定义请求头]
  C --> D[用户提交状态变更请求]
  D --> E{令牌与会话值匹配吗}
  E -- 匹配 --> F[处理请求]
  E -- 不匹配或缺失 --> G[拒绝 403 伪造请求]
  H[攻击者的跨站表单] -. 无法读取令牌 .-> G

示例

  1. 01

    表单内的隐藏字段 <input type="hidden" name="csrf" value="a8f1...">。

  2. 02

    X-CSRF-Token 请求头在服务器侧与每会话密钥校验。

常见问题

CSRF 令牌 是什么?

嵌入表单或请求头中、每个会话唯一且不可预测的值,使服务器能确认状态变更请求来自本站页面。 它属于网络安全的 身份与访问 分类。

CSRF 令牌 是什么意思?

嵌入表单或请求头中、每个会话唯一且不可预测的值,使服务器能确认状态变更请求来自本站页面。

如何防御 CSRF 令牌?

针对 CSRF 令牌 的防御通常结合技术控制与运营实践,详见上方完整定义。

相关术语