XSS vs CSRF
翻译
原文:https://portswigger.net/web-security/csrf/xss-vs-csrf
- name: 翻译
desc: 原文:https://portswigger.net/web-security/csrf/xss-vs-csrf
bgColor: '#F0DFB1'
textColor: 'green'
1
2
3
4
2
3
4
# XSS vs CSRF
在本节中,我们将解释 XSS 和 CSRF (opens new window) 之间的差异,并讨论 CSRF 令牌是否有助于防范 XSS 攻击。
# 1XSS和CSRF有什么区别?
跨站脚本(XSS) (opens new window)允许攻击者在受害用户的浏览器中执行任意 JavaScript。
跨站请求伪造(CSRF) (opens new window)允许攻击者诱使受害用户执行他们本不打算执行的操作。
XSS 漏洞的后果通常比 CSRF 漏洞更严重:
- CSRF 通常仅适用于目标用户能够执行的操作子集。许多应用程序都实现了 CSRF 防御,但偶尔会忽略一两个暴露的操作。相反,成功的 XSS 攻击通常可以诱使用户 执行其能够执行的任何操作,而不管漏洞出现的功能如何。
- CSRF 可以被描述为 “单向” 漏洞,因为攻击者虽然可以诱使受害者发出 HTTP 请求,但他们无法从该请求中检索响应。相反,XSS 是 “双向” 的,因为攻击者注入的脚本可以发出任意请求、读取响应,并将数据泄露到攻击者所在的外部域。
# 2CSRF token可以防范XSS攻击吗?
一些 XSS 攻击确实可以通过有效的 CSRF 令牌来防范。假设有一个简单的反射型XSS (opens new window)漏洞,可以像这样轻松地利用它:
https:/status?message=<script>/*+Bad+stuff+here...+*/</script>
1
现在,假设易受攻击的功能包含一个 CSRF 令牌:
https:/status?csrf-token=CIwNZNlR4XbisJF39I8yWnWX9wX4WFoz&message=<script>/*+Bad+stuff+here...+*/</script>
1
假设服务器正确验证了 CSRF 令牌,并拒绝了没有 有效令牌的请求,则 token 确实可以防止 XSS 漏洞利用。这里的提示就在其名称里:“跨站脚本”,至少在其反射 (opens new window)形式中涉及跨站请求。通过防止攻击者伪造跨站点请求,应用程序就可以防止对 XSS 漏洞的简单利用。
这里有一些重要的警告:
- 在网站中,一些功能点、以及其他任何可能的位置,如果这些地方不受 CSRF 令牌的保护,同时又存在反射型 XSS 漏洞的话,则该 XSS 可以通过正常方式利用。
- 如果站点上的某个位置存在可利用的 XSS 漏洞,即使这些操作本身受 CSRF 令牌保护,依然可以利用该漏洞 使受害用户执行任何操作。在这种情况下,攻击者的脚本可以先通过 XSS 请求相关页面,以获取有效的 CSRF 令牌,然后使用该令牌执行受保护的操作。
- CSRF 令牌不能防止存储型 XSS 漏洞。如果受 CSRF 令牌保护的页面 同时 也是存储型 XSS 漏洞的输出点,则可以通过常规方式利用该 XSS 漏洞,并且 XSS 有效负载将在用户访问该页面时执行。
(((译者加:总结以上三点:
- 一些功能受 CSRF 令牌保护,其中出现的 XSS 可以被防止。一些功能不受 CSRF 令牌保护,其中出现的 XSS 可以正常利用。
- 站点上存在可利用的 XSS 漏洞,其上所有的 CSRF 令牌都会失效。
- CSRF 令牌不能防止存储型 XSS 漏洞。
编辑 (opens new window)