窃取CSRF令牌

时间:2016-09-16 17:13:55

标签: javascript security csrf-protection

我已经阅读了有关Stack Overflow的其他问题,但没有找到这个问题的明确答案:

是什么阻止攻击者通过JS窃取用户的CSRF令牌?他能不能找到CSRF元素并通过JS获得它的价值?

我对JS不是很熟悉,但也许是这样的:

document.getElementById("csrft_token").value

3 个答案:

答案 0 :(得分:5)

来自OWASP(https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

  

跨站请求伪造(CSRF)是一种攻击,迫使最终用户在他们当前正在进行身份验证的Web应用程序上执行不需要的操作。 CSRF攻击专门针对状态更改请求,而不是数据被盗,因为攻击者无法查看对伪造请求的响应。通过社交工程的一些帮助(例如通过电子邮件或聊天发送链接),攻击者可以欺骗Web应用程序的用户执行攻击者选择的操作。如果受害者是普通用户,则成功的CSRF攻击可以强制用户执行状态更改请求,例如转移资金,更改其电子邮件地址等。如果受害者是管理帐户,CSRF可能会危及整个Web应用程序。

根据定义,CSRF攻击媒介与被攻击的服务器不在同一台服务器上,因此它无法访问该信息。

一个基本的例子:

受害者 - 鲍勃

网站 - foo.com

攻击者 - 约翰

John无法访问foo.com,但他可以通过网站或电子邮件访问Bob。他知道foo.com是如何工作的,因此他可以将请求绑定到不在foo.com域上的电子邮件或恶意网站。这将发送请求并背负Bob的凭据。

同源策略阻止John查看或拦截Bob的foo.com版本的任何内容,这就是为什么CSRF密钥可以存储在Bob从foo.com收到的页面上,而不会被约翰。

如果John能够使用JS实际看到令牌,那就意味着John可以访问来自foo.com的请求,在这种情况下,这可能是一个中间人或内部攻击

基本上,CSRF密钥的目标是仅停止CSRF攻击。如果CSRF密钥本身被截获,则发生另一次攻击。

答案 1 :(得分:1)

简短的回答是:同源政策。由于攻击者将从另一个来源提供其恶意脚本,因此不允许他的脚本读取包含在另一个来源中的数据(即令牌)。

但是,如果包含令牌的站点具有XSS漏洞且攻击者使用该漏洞加载其脚本,则源将匹配,并且他确实能够窃取其令牌。

答案 2 :(得分:0)

TL;DR

Java 脚本可以访问您的 DOMCookie

您必须阻止 Intruder 的 Java 脚本在您的用户浏览器上运行(XSS 攻击),

为了防止他们也受到CSRF攻击

Further information on tokens difference


对于 CSRF 预防,有两种流行的方法:

  • CSRF 令牌
  • XSRF 令牌

窃取CSRF

为了让攻击者访问 CSRF 令牌,他/她必须将其 js 注入受害者网页以窃取 CSRF 令牌。这种攻击称为XSS 攻击。所以你也必须防止 XSS 攻击。

另一种可能性是攻击者访问受害者内存,该内存需要具有内核空间访问权限的恶意软件。

窃取 XSRF

XSRF 保存在 cookie 中,应将 Same-Site Policy 设置为 LaxStrick 以使浏览器不会将其提供给其他脚本。

如果系统上的保存的 cookie 文件没有受到所需的权限保护,则其他受害者很容易受到攻击。