XSS 与 CSRF 攻击——有什么区别?

2022-07-20 7,075

跨站脚本(XSS)和跨站请求伪造(CSRF),它们将恶意脚本注入目标系统,以进一步利用技术栈或窃取用户数据。

什么是 XSS 和 CSRF?

CSRF和XSS都是客户端攻击,它们滥用同源策略,利用web应用程序和受害用户之间的信任关系。XSS和跨站脚本攻击允许攻击者破坏合法用户与任何易受攻击的应用程序的交互。

什么是 XSS?

XSS漏洞发生在web应用程序中,这些应用程序在不进行编码或验证的情况下接受用户输入并在响应中使用它。恶意用户编写恶意代码并通过输入表单提交。目标服务器包含这个脚本及其响应,客户机浏览器执行它。由于浏览器信任web服务器,它授予恶意脚本访问本地存储的cookie、会话令牌和其他敏感客户端信息的权限。

XSS是一个常见的攻击矢量,成功攻击的影响通常因不同的场景而不同,包括:

泄露用户文件

安装恶意软件/木马

窃取网上银行信息

HTML/DOM 内容修改

将用户重定向到未知网站

XSS 攻击类型

XSS 攻击主要分为三类:存储型 XSS 攻击/持久型 XSS/Type-I XSS

在存储式跨站攻击中,注入的恶意代码被永久地存储在易受攻击的web应用程序的不同组件中,如数据库、评论字段、访客日志、消息论坛等。每当客户端访问受感染网站或向web服务器发起请求时,该请求就会在用户的浏览器中执行恶意脚本。

无目的 XSS

一种混合形式的XSS攻击,其中攻击者的脚本被存储并反映来自后端应用程序的用户。

反射/非持久性 XSS

在反射式跨站点脚本中,恶意脚本会从 Web 服务器反射出来,例如搜索结果、错误消息或任何其他包含某些用户输入的 Web服务器响应。该脚本通过外部路径传递给受害者,例如不同的网站或电子邮件。当受害者提交表单、浏览黑客网站或点击可疑链接时,恶意脚本会被发送到该网站,然后反映在客户端的浏览器中。

基于 DOM 的 XSS

在基于 DOM 的跨站脚本中,恶意脚本是通过修改受害者浏览器的文档对象模型环境而执行的。这种攻击不会改变 Web 服务器的 HTTP 响应,但会由于DOM 修改而改变客户端代码的执行。

什么是 CSRF?

跨站点请求伪造 (CSRF) 也称一键式攻击,是一种 Web 应用程序网络攻击,可诱使受害者在不知不觉中代表攻击者执行操作。CSRF 攻击利用 Web应用程序中的一个安全漏洞,该漏洞无法区分经过身份验证的用户会话中的错误请求和合法请求。攻击者通常使用社会工程技术发起 CSRF攻击,以诱骗受害者用户加载页面或单击包含恶意请求的链接。该链接从经过身份验证的用户的浏览器向目标网站发送恶意请求。对于大多数网站,浏览器请求本质上包括会话信息,例如会话cookie、有效令牌或网站与用户关联的登录凭据。如果经过身份验证的用户已经与目标网站处于活动会话中,则站点会将新的恶意请求视为来自用户的有效请求并执行它。

CSRF 攻击类型

如果 Web 应用程序无法区分非法请求和有效请求,那么它很容易受到跨站点请求伪造的攻击。有当认证用户与web应用程序处于活动会话时,攻击才会成功。

登录 CSRF 攻击

使用一种称为Login CSRF攻击的特殊形式的CSRF攻击,攻击者可以访问受害者用户的机密和敏感数据。这种攻击迫使不知情的用户登录到黑客控制的帐户。然后,受害者被骗向账户中添加个人身份识别和敏感信息,如电子邮件地址和***信息。

存储 CSRF 攻击

CSRF攻击包也可以存储在易受攻击的网站上。对手可以通过执行高级XSS攻击或在接受HTML的字段中存储IFRAME或IMG标记来实现存储CSRF攻击。在站点上存储攻击会放大攻击的严重性和可能性,因为受害者用户现在肯定会查看CSRF加载的页面,并且也会自然地对该页面进行身份验证。

CSRF 与 XSS 的区别

CSRF和XSS都是客户端攻击,它们滥用同源策略,利用web应用程序和不知情的用户之间的信任关系。

但是,XSS 和 CSRF 攻击之间存在一些根本差异,包括:

XSS攻击遵循双向攻击模式,允许攻击者执行恶意脚本、访问响应,并将后续敏感数据发送到攻击者选择的目的地。另一方面,CSRF是一种单向攻击机制,这意味着攻击者只能发起HTTP请求,但不能检索已发起请求的响应。

CSRF攻击要求经过身份验证的用户处于活动会话中,而XSS攻击则不需要。在XSS攻击中,只要用户登录,就可以存储和交付有效载荷。

CSRF攻击的范围有限,仅限于用户可以执行的操作,例如点击恶意链接或访问黑客的网站。相反,XSS攻击提供执行恶意脚本来执行攻击者所选择的任何活动,从而扩大了攻击的范围。

在XSS攻击中,恶意代码存储在站点中,而在CSRF攻击中,恶意代码存储在受害用户访问的第三方站点中。

XSS 和 Javascript 注入有什么区别?

XSS 是一种客户端攻击,黑客将恶意脚本部署到 Web 服务器中,由毫无戒心的用户浏览器执行。

另一方面,Javascript 注入是一种服务器端攻击,黑客将恶意脚本发送到服务器,由解释器执行,就好像它是源代码的一部分一样。

有哪些有效的 CSRF 预防机制?

防止 CSRF 攻击的一些方法包括:

使用同步器令牌模式

使用双重提交 cookie

使用 HTTP 标准标头来验证请求的来源

基于 UI 的验证,例如基于 CAPTCHA 的授权和 MFA

使用 SameSite Cookie 进行请求来源管理

CSRF 令牌的使用

一些常用的有效 XSS 预防技术包括:

执行内容安全策略

验证和过滤用户输入

编码输出数据

使用自定义响应标头(Content-Type 和 X-Content-Type-Options)来管理浏览器响应解释

清理 HTML 输入

随着安全左移,在开发期间通过静态代码扫描工具可以第一时间发现可以造成严重安全事故的缺陷及安全隐患,通过提高软件安全性防范未知安全风险。


文章来源:

https://crashtest-security.com/xss-vs-csrf-difference/


本文作者:中科天齐软件安全

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/183028.html

Tags:
评论  (0)
快来写下你的想法吧!

中科天齐软件安全

文章数:95 积分: 45

WuKong软件源代码静态检测工具,为客户在软件开发过程中查找、识别、追踪绝大部分主流编码中的技术漏洞与逻辑漏洞,帮助用户提升抵御网络攻击。

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号