我试图使用Hapi的插件Crumb来实施CSRF攻击的解决方案,但似乎我没有得到解决方案流程。 我可以简单地在每个http响应中设置一个令牌作为cookie。问题在于,如果客户端发出令牌,REST如何验证CSRF令牌? REST后端如何理解这个随机字符串对这个请求是有效的,而另一个随机字符串不是?如何验证CSRF令牌?
0
A
回答
1
无法在客户端上生成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并且不知道令牌。 这里是简化数据流:
更详细地它看起来像这样:
- 1)用户发送GET请求到服务器
- 2)服务器设置与该cookie sessionid以及使用令牌保存会话数据
- 3)服务器使用包含令牌的表单在隐藏字段中返回HTML。
- 4)用户提交 形式,具有隐藏字段
- 5)服务器从提交 形式(隐藏字段进行比较令牌)与保存在会话存储的令牌一起。如果它们匹配,则表示该表单是由用户提交的。
这里是另一个篦答案:Why is it common to put CSRF prevention tokens in cookies?
相关问题
- 1. CSRF令牌验证
- 2. Yii CSRF令牌无法验证
- 3. 无CSRF令牌的身份验证
- 4. PHP CSRF表单令牌+验证建议
- 5. ”CSRF验证失败,CSRF令牌丢失或不正确。“ Django的
- 6. UseWindowsAzureActiveDirectoryBearerAuthentication如何验证令牌?
- 7. 如何验证SAML令牌
- 8. httplib - CSRF令牌
- 9. 笨,CSRF令牌
- 10. csrf令牌dajaxice
- 11. 如何验证getOpenIdTokenForDeveloperIdentity认证令牌
- 12. Rails 3.2.15“无法验证CSRF令牌的真实性”虽然存在令牌
- 13. Wowza令牌验证
- 14. 验证SAML令牌
- 15. 验证ADFS令牌
- 16. GCM令牌验证
- 17. Django CSRF令牌认证失败
- 18. CSRF验证失败。请求中止,CSRF令牌丢失或不正确
- 19. 无法验证CSRF令牌! Angular 2和弹簧安全
- 20. 设计+ Omniauth [警告:无法验证CSRF令牌真实性]
- 21. 警告:无法使用devise验证CSRF令牌的真实性
- 22. Rails Ajax无法验证CSRF令牌真实性
- 23. Zend Framework 2 - CSRF令牌服务器端验证
- 24. Apache更新到2.4.27之后,OrangeHrm中Csrf令牌验证失败
- 25. CSRF验证令牌:会话ID安全吗?
- 26. 的Symfony:身份验证请求失败:无效的CSRF令牌
- 27. Yii - 错误400 CSRF令牌无法验证
- 28. Rails发布无法验证CSRF令牌的真实性
- 29. 导轨无法验证CSRF令牌真实性
- 30. 在提交表单和验证表单后更改CSRF令牌
这意味着当用户发表的帖子,随机生成的令牌的cookie立即保存,当它进入到服务器,服务器检查的cookie令牌和请求令牌相同或不。如果它是相同的,那么它会给出访问权限? @RB_ – WahidSherief
@WahidSherif最简单的形式就是这样:1 - 在用户会话中保存一个令牌。 2 - 将包含相同标记的隐藏字段添加到要渲染的窗体。提交表单时,它包含CSRF令牌,因此您知道该表单是由用户提交的。 –
例如,X是服务器,Y是用户。每次当Y向X发布一些东西时,就会生成一个令牌。当Y提交表单时,该令牌会保存在Y的会话中。令牌也作为服务器X的隐藏字段.X会检查会话令牌和Y的隐藏令牌。如果它们匹配,X允许输入。 ?? – WahidSherief