我想保护我的应用程序免受csrf . 虽然我无法真正理解问题是什么以及我的解决方案是如何工作的,但经过一些研究后我想出了一个Angular使用的解决方案 . 据我所知,我的解决方案需要以下步骤:
-
客户要求我的水疗中心
-
我发送csrf令牌(不是httponly,以便js能够读取它) . 我还将此csrf令牌保存到服务器上的用户会话 .
-
对于每个post请求,我希望我的客户端读取csrf令牌并将X-XSRF-TOKEN头设置为此令牌 .
-
我将通过检查请求标头和用户会话csrf标记来检查每个请求 . 如果匹配,我还会检查jwt是否需要验证 .
-
验证csrf令牌后,我将对数据库进行更改 . 此外,我将再次更改csrf令牌,向用户发送新令牌,更改会话令牌 .
但我不确定这有什么帮助,如果我有一个xss漏洞,任何注入的javascript代码也可以这样做 . 我想了解问题以及这样的解决方案如何帮助 . 谢谢 .
仅供参考 . 我还在快速服务器上使用redis进行会话管理来实现基于JWT的身份验证 .
1 回答
以下链接可能有所帮助,但我将在此总结 .
https://nirajrules.wordpress.com/2010/01/16/cross-site-scripting-xss-vs-cross-site-request-forgery/
CSRF更多的是关于跨站点请求 . 例如,有人只是找到您的表单操作并直接发布给他们 . 这就是CSRF令牌有助于防止的问题 . 想象一下,人们制作一个假网站,一个网络钓鱼网站,实际上是通过您的表单提交 endpoints .
XSS是非常不同的,你是对的,任何能够在你的页面中运行的恶意JavaScript都能够访问和获取令牌 . 但这些都是不同的东西,并没有削弱CSRF代币的 Value .
祝好运 .