如何验证CSRF令牌?

问题描述 投票:0回答:1

我正在尝试使用Hapi的插件Crumb来实施解决方案,再次进行CSRF攻击,但似乎没有得到解决方案。我可以简单地在每个http响应中将标记设置为cookie。接下来的问题是,如果客户端发出令牌,那么REST如何验证CSRF令牌? REST后端如何理解此随机字符串对该请求有效,而另一个随机字符串无效?

token csrf hapijs
1个回答
4
投票
不可能在客户端上生成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,也不知道令牌。这是简化的数据流:

enter image description here

更多详细信息如下:

1)用户将GET请求发送到服务器

    2)服务器通过以下方式设置Cookiesessionid,并使用令牌保存会话数据
  • 3)服务器返回HTML,其HTML表单的隐藏字段中包含令牌。
  • 4)用户提交表单,以及隐藏字段
  • 5)服务器比较来自提交的表单(隐藏字段),并将令牌保存在会话存储中。如果它们匹配,则表示该表单是由用户提交的。
  • 这里是另一个感谢答案:Why is it common to put CSRF prevention tokens in cookies?
  • © www.soinside.com 2019 - 2024. All rights reserved.