首页 文章

每个会话信息实施CSRF令牌

提问于
浏览
-1

我一直在阅读如何实施CSRF令牌以防止CSRF攻击 . OWASP页面(https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)和各种文章声明可以基于每页或每个会话生成随机唯一标记 . (他们建议每次 Session 产生一次)

如果每个会话只生成一个令牌,那么这并不意味着每次加载页面时所有使用该会话令牌的表单页都必须具有相同的令牌(无论何时说它都被刷新)?但在大多数实现中,我看到表单的每个加载都有一个不同的随机令牌 .

它是如何工作的?在服务器端每次成功检查后,会话中存在的CSRF令牌是否无效?

我只是想知道我是否理解这一点 . 我在Stackoverflow和其他博客上阅读了很多类似的问题,但我仍然感到困惑 .

谢谢 !!

2 回答

  • 0

    即使CSRF秘密仅在每个会话中生成一次,每个表单也可以通过对发送到浏览器的密码进行盐析和散列(类似于密码被盐渍和散列的方式)来获取不同的令牌 . 在表单提交时,服务器可以根据其秘密验证盐渍令牌(再次,类似于检查密码的方式) . 这样,每个表单都可以获得自己的唯一令牌,而服务器不需要记住或使每个会话秘密以外的任何其他内容无效 .

  • 0

    我还没有阅读OWASP页面,但我相信在这种情况下,会话在访问者首次到达某个站点时开始,并持续到会话到期(无论是通过不活动还是其他一般服务器定义的标准)或访问者关闭他们的浏览器 .

    首次启动会话时,会话中不会出现CSRF令牌,因此服务器将生成一个,并将令牌存储在其内部数据中 . 会话句柄返回给浏览器,当访问者加载或重新加载站点上的另一个页面时,它会将会话句柄返回给服务器,服务器发现它已经设置了一个CSRF令牌,并使用现有的一个,而不是创造一个新的 . 因此,您不必在会话中出现 .

相关问题