我试图使用Hapi的插件Crumb来实施CSRF攻击的解决方案,但似乎我没有得到解决方案流程。 我可以简单地在每个http响应中设置一个令牌作为cookie。这里有一个问题,REST如何验证CSRF令牌,如果客户端发出令牌? REST后端如何理解这个随机字符串对此请求有效以及另一个随机字符串不是?
答案 0 :(得分:2)
无法在客户端上生成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并且无法识别令牌。
这是简化的数据流:
更多细节看起来像这样:
这是另一个问题答案:Why is it common to put CSRF prevention tokens in cookies?