无法在客户端生成 CSRF 令牌。它应该先从服务器发送到客户端,一些 JS 框架会自动从 cookie 中提取它并发送到服务器。
基本思想是,用户应该将令牌与 cookie 以及发布数据一起发送。这是一个简单的例子。如果攻击者会欺骗用户向服务发送特定请求,例如恶意网站可以拥有带有此链接的图像src="gmail.com/deleteaccount=true"。如果用户登录到 gmail。Gmail 会认为是用户发出了请求,因为与请求一起发送的 cookie 是有效的。因此,为了确保它实际上是一个用户,gmail 还需要一个带有请求数据的令牌发送:因此gmail.com/deleteaccount=true它不需要gmail.com/deleteaccount=true&token=987y23459827345sdfg.令牌必须匹配存储在 cookie 中的令牌。因此,当服务器收到请求时,它会检查 cookie 中的令牌是否等于请求正文中的令牌。攻击者无权访问用户的 cookie,也不知道令牌。这是简化的数据流:
更详细地说,它看起来像这样:
这是另一个很好的答案:为什么将 CSRF 预防令牌放在 cookie 中很常见?