窃取 CSRF 令牌
Steal CSRF token
我在 Stack Overflow 上阅读了其他问题,但没有找到这个问题的明确答案:
是什么阻止了攻击者通过 JS 窃取用户的 CSRF 令牌?难道他就不能直接找到 CSRF 元素并用 JS 获取它的值吗?
我对JS不是很熟悉,但可能是这样的:
document.getElementById("csrft_token").value
来自 OWASP(https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
)
Cross-Site Request Forgery (CSRF) is an attack that forces an end user to execute unwanted actions on a web application in which they're currently authenticated. CSRF attacks specifically target state-changing requests, not theft of data, since the attacker has no way to see the response to the forged request. With a little help of social engineering (such as sending a link via email or chat), an attacker may trick the users of a web application into executing actions of the attacker's choosing. If the victim is a normal user, a successful CSRF attack can force the user to perform state changing requests like transferring funds, changing their email address, and so forth. If the victim is an administrative account, CSRF can compromise the entire web application.
根据定义,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 密钥本身被截获,则说明发生了另一次攻击。
简短的回答是:同源策略。由于攻击者将从另一个来源提供其恶意脚本,因此不允许他的脚本读取另一个来源(即令牌)中包含的数据。
但是,如果包含令牌的站点存在 XSS 漏洞并且攻击者使用该漏洞来加载他的脚本,则源将匹配并且他确实能够窃取他的令牌。
TL;DR
Java 脚本可以访问您的 DOM 和 Cookie .
您必须在您的用户浏览器上阻止入侵者的 Java 脚本到 运行(XSS 攻击),
为了防止他们也受到 CSRF 攻击。
对于 CSRF 预防,有两种流行的方法:
- CSRF 令牌
- XSRF 令牌
窃取 CSRF
为了让攻击者访问 CSRF 令牌,he/she 必须将其 js 注入受害者网页以窃取 CSRF 令牌。这种攻击称为 XSS 攻击。所以你也必须防止 XSS 攻击。
另一种可能性,是攻击者访问受害者的内存,这需要有具有 内核 space 访问权限的恶意软件。
窃取 XSRF
XSRF 保存在 cookie 中,应将 Same-Site Policy 设置为 Lax 或 Strick 使浏览器不将其提供给另一个脚本。
如果 保存的 cookie 系统上的文件没有受到所需的 权限.
的保护,则其他受害者会受到攻击
我在 Stack Overflow 上阅读了其他问题,但没有找到这个问题的明确答案:
是什么阻止了攻击者通过 JS 窃取用户的 CSRF 令牌?难道他就不能直接找到 CSRF 元素并用 JS 获取它的值吗?
我对JS不是很熟悉,但可能是这样的:
document.getElementById("csrft_token").value
来自 OWASP(https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) )
Cross-Site Request Forgery (CSRF) is an attack that forces an end user to execute unwanted actions on a web application in which they're currently authenticated. CSRF attacks specifically target state-changing requests, not theft of data, since the attacker has no way to see the response to the forged request. With a little help of social engineering (such as sending a link via email or chat), an attacker may trick the users of a web application into executing actions of the attacker's choosing. If the victim is a normal user, a successful CSRF attack can force the user to perform state changing requests like transferring funds, changing their email address, and so forth. If the victim is an administrative account, CSRF can compromise the entire web application.
根据定义,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 密钥本身被截获,则说明发生了另一次攻击。
简短的回答是:同源策略。由于攻击者将从另一个来源提供其恶意脚本,因此不允许他的脚本读取另一个来源(即令牌)中包含的数据。
但是,如果包含令牌的站点存在 XSS 漏洞并且攻击者使用该漏洞来加载他的脚本,则源将匹配并且他确实能够窃取他的令牌。
TL;DR
Java 脚本可以访问您的 DOM 和 Cookie .
您必须在您的用户浏览器上阻止入侵者的 Java 脚本到 运行(XSS 攻击),
为了防止他们也受到 CSRF 攻击。
对于 CSRF 预防,有两种流行的方法:
- CSRF 令牌
- XSRF 令牌
窃取 CSRF
为了让攻击者访问 CSRF 令牌,he/she 必须将其 js 注入受害者网页以窃取 CSRF 令牌。这种攻击称为 XSS 攻击。所以你也必须防止 XSS 攻击。
另一种可能性,是攻击者访问受害者的内存,这需要有具有 内核 space 访问权限的恶意软件。
窃取 XSRF
XSRF 保存在 cookie 中,应将 Same-Site Policy 设置为 Lax 或 Strick 使浏览器不将其提供给另一个脚本。
如果 保存的 cookie 系统上的文件没有受到所需的 权限.
的保护,则其他受害者会受到攻击