什么时候向客户端发送 CSRF 令牌?

when sever send CSRF tokens to client?

我混淆了会话 ID 和 CSRF 令牌。所以我对此进行了搜索并了解了一点。 会话 ID 用于验证用户。 CSRF 令牌用于验证请求本身。 我的问题是服务器何时向用户发送 CSRF 令牌?

例如 当客户端访问 www.sample.com first time, sever send session id to client.(is that right?) client want to change his password. so he come to www.sample.com/change where client can change password and is located change button(post). And that time(when client visit www.sample.com/change) 服务器向客户端发送 CSRF 令牌时?或者当客户端 post 他们的数据然后中间件发送 CSRF 并在服务器获得 post 数据之前进行比较?

当客户端访问www.sample.com/change页面时,服务器发送CSRF token。通常,CSRF 令牌作为隐藏的 html 元素嵌入到 HTML 文件中,例如 <meta> 标签或隐藏的 <input> 标签。因此,当客户端发送 GET 请求以检索 www.sample.com/change 页面时,CSRF 令牌将作为 HTML 页面的一部分返回。

资源:

额外考虑

假设我们采用您问题中描述的“中间件”方法。在这种情况下,CSRF 令牌将在服务器收到 POST/PUT 请求后生成。然后,服务器无法辨别请求是由合法站点 (www.sample.com) 还是由冒充站点 (www.malicious.com) 生成的,因为这两个请求可能看起来完全相同(请注意,恶意站点可以欺骗请求 headers 例如 origin)。因此这种方法不能防止 CSRF 攻击。 CSRF令牌需要从客户端发送,这样服务器才能识别来自合法网站的请求。