我读到,当使用JWT时,不需要防止CSRF攻击,例如:“由于您不依赖cookie,您不需要防止跨站点请求”。
但是,有一点我不明白:如果我将令牌存储在localStorage中(正如我在同一网站的教程中被告知的那样),那么攻击者如何防止通过读取我的localStorage而不是Cookie来伪造恶意请求呢?
由于它是在服务器端生成的,我不知道如何在客户机请求中使用令牌而不将其存储在客户机的某个地方。
严格来说,是的,本地/会话存储(我称之为HTML5存储)中存储的任何内容都可能在跨站点脚本(XSS)攻击中被盗。参见本文。
然而,有许多活动部件需要考虑。
首先,关于JavaScript访问,HTML5存储和cookie的范围有细微的差别。
其次,由于Cookie被标记为域,当向服务器发出请求时,浏览器将发送所有且仅有的带有匹配域的Cookie,而不管发起请求的页面的域是什么。
最后一部分是如何完成CSRF攻击的(同源策略只提供了这么多帮助)。CSRF上的OWASP页面是了解这类攻击如何工作的好资源。
在本地存储中存储身份验证令牌并手动将其添加到每个请求中以防止CSRF攻击的原因是关键字:manual。由于浏览器不会自动发送auth令牌,如果我访问evil.com
,并且它设法发送帖子http://example.com/delete-my-account
,它将无法发送我的authn令牌,因此将忽略该请求。
考虑到上述内容,是使用cookie还是HTML5存储成为一系列权衡:
在HTML5存储中存储authen令牌意味着:
哪种选择更好取决于你的需要。
httponly
secure
选项。我的问题是,对每个表单使用一个令牌,而不更新每个表单提交的令牌,安全吗?这能防止CSRF吗?
示例: 爱丽丝通过浏览器登录到“https://example.com”(使用cookie)。我想,她使用的是现代浏览器。 爱丽丝访问“https://evil.com”,而evil.com的客户端代码对“https://example.com”执行某种请求(经典CSRF场景)。 所以: null null
我正在AngularJS SPA中使用资源所有者密码凭证OAuth 2.0流。有几篇文章(这里,这里…)这个问题的答案解释了我们不应该将刷新令牌存储在(web)客户端(LocalStorage)上,而是将它们加密存储在HttpOnly Cookie中,并使用代理API实现对refreh令牌的解密,从而将其转发给安全令牌服务。 大多数文章都暗示我们应该使用一种常见的保护机制来关注CSRF。我想知道单
本页描述了解释CSRF攻击的用例(16.1): https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html 但是,如果用户确实登录了银行的网站,那么邪恶的网站难道不可能发出GET请求以获取新的CSRF令牌,并在根本不需要用户的情况下撰写帖子吗? 答案必须是否定的,否则CSRF令牌将毫无用处,但我
问题内容: 我有使用mod_wsgi在apache服务器上运行的django,以及由apache(而不是django)直接提供服务的angularjs应用。我想对django服务器进行POST调用(运行rest_framework),但csrf令牌存在问题。 是否可以通过某种方式从服务器设置令牌而不将其作为模板的一部分放置(因为这些页面没有经过django)? 我希望能够通过GET请求以cooki
问题内容: 我正在构建一个通过webservices与symfony2应用程序对话的移动应用程序,我找不到在特定控制器/操作上禁用csrf保护的方法 我想将注册数据发布到此操作并使用sf2表单验证。我没有在移动应用程序中致电该表格 无法在操作中更改容器参数,因为它是冻结参数而引发异常… 我不想禁用整个应用程序的表单保护 有什么线索吗? 谢谢 ! 更新:使用symfony 2.1.x 问题答案: 如