代码之家  ›  专栏  ›  技术社区  ›  Loading...

如何验证CSRF令牌?

  •  1
  • Loading...  · 技术社区  · 9 年前

    我正在尝试使用Hapi的插件 Crumb

    1 回复  |  直到 6 年前
        1
  •  8
  •   RB_    8 年前

    它应该首先从服务器发送到客户端,一些JS框架会自动从cookie中提取出来并发送到服务器。

    其基本思想是,用户应该将令牌与cookie以及post数据一起发送。这里有一个简单的例子。如果攻击者诱骗用户向服务发送特定请求,例如,恶意网站可以具有带有此链接的图像 src="gmail.com/deleteaccount=true" 。如果用户登录到gmail。Gmail会认为是用户发出了请求,因为cookie和请求一起发送是有效的。因此,为了确保它实际上是一个用户,gmail还需要一个令牌发送和请求数据:所以,而不是 gmail.com/deleteaccount=true 它需要 gmail.com/deleteaccount=true&token=987y23459827345sdfg. 令牌必须与存储在cookie中的令牌匹配。因此,当服务器收到请求时,它会检查cookie中的令牌是否等于请求正文中的令牌。攻击者无法访问用户的Cookie,也不知道令牌。 以下是简化的数据流:

    enter image description here

    在更多细节中,它看起来像这样:

    • 1) 用户向服务器发送GET请求
    • sessionid,并使用令牌保存会话数据
    • 3) 服务器返回HTML,表单包含隐藏字段中的令牌。
    • 5) 服务器比较来自 已提交表单(隐藏字段),令牌保存在会话存储器中。如果匹配,则表示表单由用户提交。

    Why is it common to put CSRF prevention tokens in cookies?

    推荐文章