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