如何使用同步令牌模式来防止CSRF安全
How is using Synchronizer Token Pattern to prevent CSRF safe?
我一直在阅读关于使用同步器令牌模式来防止CSRF (CSRF的意思是跨站点请求伪造),我不明白它实际上是如何安全的。
假设我有一个假的银行网站fakebank.com,有两个url:
-
fakebank.com/withdrawForm.html
—显示取款表单的GET请求 -
fakebank.com/doWithdraw
- POST到此url进行提取
我对安全漏洞的理解是maliciousSite.com
可以欺骗对fakebank.com/doWithdraw
的POST请求,如果您当前登录到fakebank,则POST将成功。
假设我们实现了一个同步令牌模式,它将在fakebank.com/withdrawForm.html
上嵌入一个秘密代码。不能maliciousSite.com
只是欺骗GET请求的形式,解析html的结果,获得令牌,然后创建与令牌POST请求?
这是假设fakebank.com没有检查HTTP Referrer或Origin或maliciousSite.com
成功欺骗Referrer/Origin是fakebank.com。
这是安全的,maliciousSite.com
不能简单地执行GET
,窃取令牌,然后执行POST
的原因是请求是由用户的浏览器完成的,而不是由maliciousSite.com
的服务器完成的。从fakebank.com
返回的所有数据都返回到用户的浏览器,而不是返回到maliciousSite.com
的服务器。如果maliciousSite.com
确实执行GET来检索令牌,那么它将是与发给用户的令牌不同的令牌。由于相同域的限制,maliciousSite.com
不能将此cookie设置为提交给fakebank.com
的用户浏览器。
CSRF POST
攻击的工作原理是欺骗用户的浏览器使用正确格式的POST
请求直接请求fakebank.com/withdrawForm.html
。fakebank.com
的服务器愉快地执行请求的POST
,从而使用POST
主体中提供的参数(其中包括由maliciousSite.com
放置的属于攻击者的目标账户)转移资金。maliciousSite.com
的服务器不需要看到返回的数据,因为已经采取了操作(除非fakebank.com
使用这些CSRF令牌,maliciousSite.com
不可能知道这些令牌,除非以某种方式泄露。)它不能要求它)。如果fakebank.com
正在使用CSRF令牌,那么maliciousSite.com
将提交缺少令牌的POST
请求,从而表明正在进行潜在的CSRF攻击。
该方法的漏洞包括使用未充分保密的CSRF令牌,并以某种方式泄露。另外,如果CSRF令牌不够随机,那么maliciousSite.com
可能能够猜出它。此外,如果浏览器对相同域策略的执行存在弱点,这可能会被利用。一般来说,现代浏览器不会受此影响。
如果这是一个不充分的解释,请让我知道,我会努力为你表达得更好。
这正是问题的关键。浏览器中的同源策略不允许对其他站点的GET请求。因此,任何站点都不能仅在浏览器中使用javascript从另一个站点获取CSRF令牌。
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 使用javascript存储变量的最安全方式
- Django: AJAX + CSRF POST gives 403
- 是否存在React Native“;WEB代码安全防护”;
- 内容安全策略:页面's设置阻止加载资源
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- 如何在Google chrome安全首选项文件中创建扩展安全哈希代码
- ES6 模板文字是否比 eval 更安全
- CORS保持在SecurityError上:操作不安全
- 旋转木马;启用内容安全策略时无法工作
- 如何照顾CSRF&单页应用程序中不使用cookie的XSS攻击
- 从自己的安全系统中重新找回自己
- 关于ajax的安全问题
- 使用JQueryAjax和ASP.NET泛型处理程序时必须采取的XSS和CSRF预防之外的安全措施
- 禁用CSRF在我的web应用程序或更安全的方法
- 如何使用同步令牌模式来防止CSRF安全
- 实现无CSRF JWT身份验证的安全方法
- CSRF令牌安全
- 如果我在JS中存储一个静态会话令牌以供AJAX使用,它对CSRF是否安全?