searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

XSS攻击介绍

2024-11-13 09:32:10
1
0

一、XSS 攻击概述

XSS(Cross Site Scripting)攻击,即跨站脚本攻击,是一种在 Web 应用中广泛存在的安全漏洞。攻击者通过在目标网站注入恶意脚本,当用户浏览被攻击的页面时,恶意脚本就会在用户的浏览器上执行,从而对用户造成各种危害。
XSS 攻击的危害不容小觑。恶意脚本可以窃取用户的 Cookie 信息,例如,恶意 JavaScript 可以通过 “document.cookie” 获取用户的 Cookie,然后利用 XMLHttpRequest 或者 Fetch 加上 CORS 功能将数据发送给恶意服务器。这样,攻击者拿到用户的 Cookie 信息之后,就可以在其他电脑上模拟用户的登录,进行转账等危险操作。此外,恶意脚本还可以监听用户行为,如使用 “addEventListener” 接口来监听键盘事件,获取用户输入的信用卡等敏感信息并发送到恶意服务器。同时,恶意脚本能够通过修改 DOM 伪造假的登录窗口,欺骗用户输入用户名和密码等信息。它还可以在页面内生成浮窗广告,严重影响用户体验。
XSS 攻击的方式多种多样。通常情况下,主要有存储型 XSS 攻击、反射型 XSS 攻击和基于 DOM 的 XSS 攻击三种方式来注入恶意脚本。存储型 XSS 攻击中,黑客利用站点漏洞将恶意 JavaScript 代码提交到网站的数据库中,当用户请求包含恶意脚本的页面时,恶意脚本就会执行并上传用户数据。例如,2015 年喜马拉雅就曾被曝出存储型 XSS 漏洞,起因是服务器对关键字过滤不严格。反射型 XSS 攻击则是恶意 JavaScript 脚本作为用户发送给网站请求的一部分,网站又将恶意脚本返回给用户,在用户页面中执行后被黑客利用进行恶意操作。在现实生活中,黑客经常通过 QQ 群或者邮件等渠道诱导用户点击恶意链接。而基于 DOM 的 XSS 攻击主要是前端 JavaScript 自身的安全漏洞,恶意代码的取出和执行由浏览器端完成。

二、攻击原理与类型

(一)攻击原理

XSS 攻击的原理是攻击者向有 XSS 漏洞的网站中输入恶意的 HTML 代码,当其它用户浏览该网站时候,该段 HTML 代码会自动执行,从而达到攻击的目的。例如,攻击者可以在某论坛的评论功能中输入恶意代码:<script>while (true) {alert('你关不掉我');}</script>。如果服务器没有过滤或转义掉这些脚本,作为内容发布到页面上,其他用户访问这个页面的时候就会运行这段脚本,可能会导致用户的 Cookie 被盗取,或者页面结构被破坏,甚至重定向到其它恶意网站。

(二)类型

  1. 持久型 XSS(存储型)
    • 持久型 XSS 是将对客户端攻击的脚本植入到服务器上,从而导致每个正常访问到的用户都会遭到这段 XSS 脚本的攻击。比如在一些论坛、留言板等地方,恶意用户提交的代码会存储在服务器端(数据库,内存等)。当其他用户请求目标页面时,服务器会将恶意代码一起发送给用户,在用户的浏览器中执行。持久型 XSS 的危害很大,因为恶意代码被永久存储在服务器上,只要有用户访问相关页面,就有可能受到攻击。例如,2015 年喜马拉雅被曝出的存储型 XSS 漏洞,就是因为服务器对关键字过滤不严格,导致黑客可以将恶意 JavaScript 代码提交到网站的数据库中,当用户请求包含恶意脚本的页面时,恶意脚本就会执行并上传用户数据。
  1. 非持久型 XSS(反射型)
    • 非持久型 XSS 是对一个页面的 URL 中的某个参数做文章,把精心构造好的恶意脚本包装在 URL 参数中,再将这个 URL 发布到网上,骗取用户访问,从而进行攻击。发出请求时,XSS 脚本存在于在 URL 中,作为输入提交到服务器端,服务器解析后响应,XSS 代码随响应内容一起传回给浏览器,最后浏览器解析执行 XSS 代码。非持久性 XSS 的安全威胁比较小,因为只要服务器调整业务代码进行过滤,黑客精心构造的这段 URL 就会瞬间失效了。在现实生活中,黑客经常通过 QQ 群或者邮件等渠道诱导用户点击恶意链接,当用户点击链接时,恶意脚本就会作为请求的一部分发送到服务器,服务器再将恶意脚本返回给用户,在用户页面中执行后被黑客利用进行恶意操作。
  1. DOM 型 XSS
    • DOM 型 XSS 是一种特殊类型的反射型 XSS,它是基于 DOM 文档对象模型的一种漏洞。客户端的脚本程序可以通过修改 DOM 动态修改页面内容,从客户端获取 DOM 中的数据并在本地执行。由于 DOM 是在客户端修改节点的,所以基于 DOM 型的 XSS 漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。常见的攻击方式是用户请求一个经过专门设计的 URL,它由攻击者发布,而且其中包含 XSS 代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM 对象就会处理 XSS 代码,导致存在 XSS 漏洞。例如,攻击者可以构造一个包含恶意代码的 URL,当用户访问这个 URL 时,浏览器会解析 HTML 并构建 DOM 树,恶意脚本通过 JavaScript 等方式对 DOM 进行修改,从而在用户的浏览器上执行恶意代码。

三、攻击危害

XSS 攻击带来的危害多种多样,严重威胁着网络安全和用户权益。
(一)盗取账号
攻击者可以利用 XSS 漏洞注入恶意脚本,获取用户的登录凭证,如 Cookie 信息等。一旦攻击者获取到用户的 Cookie,就可以在其他设备上模拟用户登录,从而盗取各类用户账号,包括但不限于社交账号、网银账号、管理员账号等。例如,通过诱导用户点击包含恶意脚本的链接,恶意脚本在用户浏览器中执行,获取用户的 Cookie 并发送到攻击者的服务器。
(二)窃取隐私
XSS 攻击可以窃取用户的隐私信息。恶意脚本能够获取用户的浏览历史、真实 IP、开放端口等信息,严重侵犯用户的隐私权。此外,攻击者还可以利用恶意脚本窃取用户的个人敏感信息,如身份证号码、电话号码、家庭住址等。
(三)劫持流量
攻击者可以通过 XSS 攻击劫持用户的流量,实现恶意跳转。例如,在网页中插入恶意脚本,当用户访问被攻击的网页时,就会被重定向到恶意网站。这样,攻击者可以获取流量收益,或者进行钓鱼攻击等。
(四)挂马攻击
XSS 攻击还可以用于网站挂马。攻击者在被攻击的网页中插入恶意脚本,引导用户下载并安装恶意软件,如木马程序等。一旦用户的设备被感染,攻击者就可以控制用户的设备,窃取用户的敏感信息,或者进行其他恶意操作。
(五)非法转账
如果在用户的支付界面植入一段恶意脚本,自动填写收款人和金额并提交,就能完成转账。例如,攻击者可以构造一个包含恶意脚本的链接,诱导用户点击,当用户访问支付页面时,恶意脚本自动执行转账操作。
(六)强制发送电子邮件
恶意脚本可以强制用户的浏览器发送电子邮件,给用户带来骚扰和安全风险。攻击者可以利用用户的邮箱账号发送垃圾邮件、钓鱼邮件等,进一步扩大攻击范围。
(七)进行大量的客户端攻击
如 DDoS 攻击,攻击者可以利用 XSS 漏洞控制大量用户的浏览器,发起分布式拒绝服务攻击,使目标网站无法正常服务。
(八)结合其他漏洞,实施进一步作恶
XSS 攻击可以与 CSRF 漏洞结合,实施更加复杂的攻击。例如,攻击者利用 XSS 漏洞获取用户的 Cookie,然后结合 CSRF 漏洞,盗用用户身份发送恶意请求,进行非法操作。
(九)提升用户权限,进一步渗透网站
攻击者可以利用 XSS 漏洞提升用户权限,包括进一步渗透网站。例如,通过注入恶意脚本,获取管理员权限,从而对网站进行更深入的攻击和破坏。

四、不同类型攻击在案例中的具体表现

  1. 存储型 XSS:在一些社交平台的评论功能中,如果服务器对用户输入的内容过滤不严格,恶意用户可以提交包含恶意 JavaScript 代码的评论。这些代码会存储在服务器端的数据库中,当其他用户查看评论时,恶意代码就会执行。例如喜马拉雅曾被曝出存储型 XSS 漏洞,起因是服务器对关键字过滤不严格,黑客可以将恶意 JavaScript 代码提交到网站的数据库中,当用户请求包含恶意脚本的页面时,恶意脚本就会执行并上传用户数据。
  1. 反射型 XSS:黑客通常通过构造一个包含 XSS 代码的 URL,诱导用户点击链接,触发 XSS 代码。在现实生活中,黑客经常通过 QQ 群或者邮件等渠道诱导用户点击恶意链接。当用户点击链接时,恶意脚本就会作为请求的一部分发送到服务器,服务器再将恶意脚本返回给用户,在用户页面中执行后被黑客利用进行恶意操作。
  1. DOM 型 XSS:攻击者可以构造一个包含恶意代码的 URL,当用户访问这个 URL 时,浏览器会解析 HTML 并构建 DOM 树,恶意脚本通过 JavaScript 等方式对 DOM 进行修改,从而在用户的浏览器上执行恶意代码。例如,攻击者可以在 URL 中加入恶意脚本,利用客户端脚本程序通过修改 DOM 动态修改页面内容,从客户端获取 DOM 中的数据并在本地执行。

五、防范措施

(一)设置 HttpOnly 避免 cookie 劫持

设置 HttpOnly 属性可以阻止 JavaScript 对 Cookie 的访问,减少攻击者通过 XSS 获取 Cookie 的机会。例如,在服务器端设置 Cookie 时,可以添加HttpOnly属性

(二)过滤标签

  1. 使用过滤器过滤用户输入的内容,防止恶意标签被注入。例如,可以使用自定义的过滤器对用户输入进行处理,如去除<script>、<iframe>等恶意标签。
  1. 使用白名单技术,只允许特定的标签和属性通过。如只允许<a>标签的href属性和title属性,<img>标签的src、alt、title属性等。

(三)编码转义

      对用户输入的内容进行 HTML 编码转义,将特殊字符转换为对应的 HTML 实体,防止恶意脚本被执行。例如,将<转换为&lt;,将>转换为&gt;,将"转换为&quot;等

(四)限制输入长度

      限制用户输入的长度可以减少攻击者注入恶意脚本的可能性。例如,可以在表单中设置输入框的最大长度,或者在服务器端对用户输入的内容进行长度限制。如果用户输入的内容超过了限制长度,可以进行截断或者拒绝接收。

(五)使用内容安全策略(CSP)

  1. 内容安全策略(CSP)是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本(XSS)和数据注入攻击等。通过指定有效域,即浏览器认可的可执行脚本的有效来源,使服务器管理者有能力减少或消除 XSS 攻击所依赖的载体。
  2. 配置 CSP 可以通过添加Content-Security-Policy HTTP 标头到一个页面,并配置相应的值,以控制用户代理(浏览器等)可以为该页面获取哪些资源。

(六)严格验证输入数据

  1. 对所有用户供应的数据(包括 URL 参数、表单数据、JSON 请求和 HTTP 头信息)实施格式规范和类型限制。使用白名单方法设定准许的输入类型,任何不符合规定的输入都应清除或转义,避免恶意脚本注入并执行。
  1. 对于富文本编辑器输入,应用净化库如 OWASP Java HTML Sanitizer,该库能够精确地移除或处理有潜在危险的 HTML 标签与属性。
 
0条评论
0 / 1000
f****n
3文章数
0粉丝数
f****n
3 文章 | 0 粉丝
f****n
3文章数
0粉丝数
f****n
3 文章 | 0 粉丝
原创

XSS攻击介绍

2024-11-13 09:32:10
1
0

一、XSS 攻击概述

XSS(Cross Site Scripting)攻击,即跨站脚本攻击,是一种在 Web 应用中广泛存在的安全漏洞。攻击者通过在目标网站注入恶意脚本,当用户浏览被攻击的页面时,恶意脚本就会在用户的浏览器上执行,从而对用户造成各种危害。
XSS 攻击的危害不容小觑。恶意脚本可以窃取用户的 Cookie 信息,例如,恶意 JavaScript 可以通过 “document.cookie” 获取用户的 Cookie,然后利用 XMLHttpRequest 或者 Fetch 加上 CORS 功能将数据发送给恶意服务器。这样,攻击者拿到用户的 Cookie 信息之后,就可以在其他电脑上模拟用户的登录,进行转账等危险操作。此外,恶意脚本还可以监听用户行为,如使用 “addEventListener” 接口来监听键盘事件,获取用户输入的信用卡等敏感信息并发送到恶意服务器。同时,恶意脚本能够通过修改 DOM 伪造假的登录窗口,欺骗用户输入用户名和密码等信息。它还可以在页面内生成浮窗广告,严重影响用户体验。
XSS 攻击的方式多种多样。通常情况下,主要有存储型 XSS 攻击、反射型 XSS 攻击和基于 DOM 的 XSS 攻击三种方式来注入恶意脚本。存储型 XSS 攻击中,黑客利用站点漏洞将恶意 JavaScript 代码提交到网站的数据库中,当用户请求包含恶意脚本的页面时,恶意脚本就会执行并上传用户数据。例如,2015 年喜马拉雅就曾被曝出存储型 XSS 漏洞,起因是服务器对关键字过滤不严格。反射型 XSS 攻击则是恶意 JavaScript 脚本作为用户发送给网站请求的一部分,网站又将恶意脚本返回给用户,在用户页面中执行后被黑客利用进行恶意操作。在现实生活中,黑客经常通过 QQ 群或者邮件等渠道诱导用户点击恶意链接。而基于 DOM 的 XSS 攻击主要是前端 JavaScript 自身的安全漏洞,恶意代码的取出和执行由浏览器端完成。

二、攻击原理与类型

(一)攻击原理

XSS 攻击的原理是攻击者向有 XSS 漏洞的网站中输入恶意的 HTML 代码,当其它用户浏览该网站时候,该段 HTML 代码会自动执行,从而达到攻击的目的。例如,攻击者可以在某论坛的评论功能中输入恶意代码:<script>while (true) {alert('你关不掉我');}</script>。如果服务器没有过滤或转义掉这些脚本,作为内容发布到页面上,其他用户访问这个页面的时候就会运行这段脚本,可能会导致用户的 Cookie 被盗取,或者页面结构被破坏,甚至重定向到其它恶意网站。

(二)类型

  1. 持久型 XSS(存储型)
    • 持久型 XSS 是将对客户端攻击的脚本植入到服务器上,从而导致每个正常访问到的用户都会遭到这段 XSS 脚本的攻击。比如在一些论坛、留言板等地方,恶意用户提交的代码会存储在服务器端(数据库,内存等)。当其他用户请求目标页面时,服务器会将恶意代码一起发送给用户,在用户的浏览器中执行。持久型 XSS 的危害很大,因为恶意代码被永久存储在服务器上,只要有用户访问相关页面,就有可能受到攻击。例如,2015 年喜马拉雅被曝出的存储型 XSS 漏洞,就是因为服务器对关键字过滤不严格,导致黑客可以将恶意 JavaScript 代码提交到网站的数据库中,当用户请求包含恶意脚本的页面时,恶意脚本就会执行并上传用户数据。
  1. 非持久型 XSS(反射型)
    • 非持久型 XSS 是对一个页面的 URL 中的某个参数做文章,把精心构造好的恶意脚本包装在 URL 参数中,再将这个 URL 发布到网上,骗取用户访问,从而进行攻击。发出请求时,XSS 脚本存在于在 URL 中,作为输入提交到服务器端,服务器解析后响应,XSS 代码随响应内容一起传回给浏览器,最后浏览器解析执行 XSS 代码。非持久性 XSS 的安全威胁比较小,因为只要服务器调整业务代码进行过滤,黑客精心构造的这段 URL 就会瞬间失效了。在现实生活中,黑客经常通过 QQ 群或者邮件等渠道诱导用户点击恶意链接,当用户点击链接时,恶意脚本就会作为请求的一部分发送到服务器,服务器再将恶意脚本返回给用户,在用户页面中执行后被黑客利用进行恶意操作。
  1. DOM 型 XSS
    • DOM 型 XSS 是一种特殊类型的反射型 XSS,它是基于 DOM 文档对象模型的一种漏洞。客户端的脚本程序可以通过修改 DOM 动态修改页面内容,从客户端获取 DOM 中的数据并在本地执行。由于 DOM 是在客户端修改节点的,所以基于 DOM 型的 XSS 漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。常见的攻击方式是用户请求一个经过专门设计的 URL,它由攻击者发布,而且其中包含 XSS 代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM 对象就会处理 XSS 代码,导致存在 XSS 漏洞。例如,攻击者可以构造一个包含恶意代码的 URL,当用户访问这个 URL 时,浏览器会解析 HTML 并构建 DOM 树,恶意脚本通过 JavaScript 等方式对 DOM 进行修改,从而在用户的浏览器上执行恶意代码。

三、攻击危害

XSS 攻击带来的危害多种多样,严重威胁着网络安全和用户权益。
(一)盗取账号
攻击者可以利用 XSS 漏洞注入恶意脚本,获取用户的登录凭证,如 Cookie 信息等。一旦攻击者获取到用户的 Cookie,就可以在其他设备上模拟用户登录,从而盗取各类用户账号,包括但不限于社交账号、网银账号、管理员账号等。例如,通过诱导用户点击包含恶意脚本的链接,恶意脚本在用户浏览器中执行,获取用户的 Cookie 并发送到攻击者的服务器。
(二)窃取隐私
XSS 攻击可以窃取用户的隐私信息。恶意脚本能够获取用户的浏览历史、真实 IP、开放端口等信息,严重侵犯用户的隐私权。此外,攻击者还可以利用恶意脚本窃取用户的个人敏感信息,如身份证号码、电话号码、家庭住址等。
(三)劫持流量
攻击者可以通过 XSS 攻击劫持用户的流量,实现恶意跳转。例如,在网页中插入恶意脚本,当用户访问被攻击的网页时,就会被重定向到恶意网站。这样,攻击者可以获取流量收益,或者进行钓鱼攻击等。
(四)挂马攻击
XSS 攻击还可以用于网站挂马。攻击者在被攻击的网页中插入恶意脚本,引导用户下载并安装恶意软件,如木马程序等。一旦用户的设备被感染,攻击者就可以控制用户的设备,窃取用户的敏感信息,或者进行其他恶意操作。
(五)非法转账
如果在用户的支付界面植入一段恶意脚本,自动填写收款人和金额并提交,就能完成转账。例如,攻击者可以构造一个包含恶意脚本的链接,诱导用户点击,当用户访问支付页面时,恶意脚本自动执行转账操作。
(六)强制发送电子邮件
恶意脚本可以强制用户的浏览器发送电子邮件,给用户带来骚扰和安全风险。攻击者可以利用用户的邮箱账号发送垃圾邮件、钓鱼邮件等,进一步扩大攻击范围。
(七)进行大量的客户端攻击
如 DDoS 攻击,攻击者可以利用 XSS 漏洞控制大量用户的浏览器,发起分布式拒绝服务攻击,使目标网站无法正常服务。
(八)结合其他漏洞,实施进一步作恶
XSS 攻击可以与 CSRF 漏洞结合,实施更加复杂的攻击。例如,攻击者利用 XSS 漏洞获取用户的 Cookie,然后结合 CSRF 漏洞,盗用用户身份发送恶意请求,进行非法操作。
(九)提升用户权限,进一步渗透网站
攻击者可以利用 XSS 漏洞提升用户权限,包括进一步渗透网站。例如,通过注入恶意脚本,获取管理员权限,从而对网站进行更深入的攻击和破坏。

四、不同类型攻击在案例中的具体表现

  1. 存储型 XSS:在一些社交平台的评论功能中,如果服务器对用户输入的内容过滤不严格,恶意用户可以提交包含恶意 JavaScript 代码的评论。这些代码会存储在服务器端的数据库中,当其他用户查看评论时,恶意代码就会执行。例如喜马拉雅曾被曝出存储型 XSS 漏洞,起因是服务器对关键字过滤不严格,黑客可以将恶意 JavaScript 代码提交到网站的数据库中,当用户请求包含恶意脚本的页面时,恶意脚本就会执行并上传用户数据。
  1. 反射型 XSS:黑客通常通过构造一个包含 XSS 代码的 URL,诱导用户点击链接,触发 XSS 代码。在现实生活中,黑客经常通过 QQ 群或者邮件等渠道诱导用户点击恶意链接。当用户点击链接时,恶意脚本就会作为请求的一部分发送到服务器,服务器再将恶意脚本返回给用户,在用户页面中执行后被黑客利用进行恶意操作。
  1. DOM 型 XSS:攻击者可以构造一个包含恶意代码的 URL,当用户访问这个 URL 时,浏览器会解析 HTML 并构建 DOM 树,恶意脚本通过 JavaScript 等方式对 DOM 进行修改,从而在用户的浏览器上执行恶意代码。例如,攻击者可以在 URL 中加入恶意脚本,利用客户端脚本程序通过修改 DOM 动态修改页面内容,从客户端获取 DOM 中的数据并在本地执行。

五、防范措施

(一)设置 HttpOnly 避免 cookie 劫持

设置 HttpOnly 属性可以阻止 JavaScript 对 Cookie 的访问,减少攻击者通过 XSS 获取 Cookie 的机会。例如,在服务器端设置 Cookie 时,可以添加HttpOnly属性

(二)过滤标签

  1. 使用过滤器过滤用户输入的内容,防止恶意标签被注入。例如,可以使用自定义的过滤器对用户输入进行处理,如去除<script>、<iframe>等恶意标签。
  1. 使用白名单技术,只允许特定的标签和属性通过。如只允许<a>标签的href属性和title属性,<img>标签的src、alt、title属性等。

(三)编码转义

      对用户输入的内容进行 HTML 编码转义,将特殊字符转换为对应的 HTML 实体,防止恶意脚本被执行。例如,将<转换为&lt;,将>转换为&gt;,将"转换为&quot;等

(四)限制输入长度

      限制用户输入的长度可以减少攻击者注入恶意脚本的可能性。例如,可以在表单中设置输入框的最大长度,或者在服务器端对用户输入的内容进行长度限制。如果用户输入的内容超过了限制长度,可以进行截断或者拒绝接收。

(五)使用内容安全策略(CSP)

  1. 内容安全策略(CSP)是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本(XSS)和数据注入攻击等。通过指定有效域,即浏览器认可的可执行脚本的有效来源,使服务器管理者有能力减少或消除 XSS 攻击所依赖的载体。
  2. 配置 CSP 可以通过添加Content-Security-Policy HTTP 标头到一个页面,并配置相应的值,以控制用户代理(浏览器等)可以为该页面获取哪些资源。

(六)严格验证输入数据

  1. 对所有用户供应的数据(包括 URL 参数、表单数据、JSON 请求和 HTTP 头信息)实施格式规范和类型限制。使用白名单方法设定准许的输入类型,任何不符合规定的输入都应清除或转义,避免恶意脚本注入并执行。
  1. 对于富文本编辑器输入,应用净化库如 OWASP Java HTML Sanitizer,该库能够精确地移除或处理有潜在危险的 HTML 标签与属性。
 
文章来自个人专栏
WEB应用安全
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0