Web安全系列——XSS攻击

文章首发公众号: 海天二路搬砖工

一、什么是XSS攻击

XSS (Cross-site scripting)攻击,即跨站脚本攻击。

攻击者通过在受害者的浏览器中注入恶意代码,攻击受害者的登录凭证、盗取敏感信息或控制受害者的会话等。

XSS攻击是很场景的Web应用攻击类型。

二、XSS攻击的不同类型和原理分析

根据攻击者的角色和攻击载体,XSS攻击可以分为三种类型:

攻击载体攻击者角色
反射型XSS攻击攻击者制作的网页或链接能够诱发被攻击者打开某个网页的人员
存储型XSS攻击攻击者与被攻击者共同使用的Web应用要攻击的网站的用户
DOM型XSS攻击目标网站的DOM元素被恶意修改普通用户

三、反射型XSS攻击

1. 什么是反射型XSS攻击

反射型XSS攻击是将注入的恶意脚本添加到一个网址中,然后给用户发送这个网址。一旦用户打开这个网址,就会执行脚本并导致攻击。攻击负载和脚本跟随用户点击链接,并被嵌入到响应中,在浏览器上执行。

2. 反射型XSS攻击的原理&步骤

  1. 攻击者构造一个带有恶意脚本的链接,其链接参数包含用户的输入。
  2. 将链接发送给受害者。
  3. 受害者点击链接时,恶意脚本会被浏览器解析并执行,从而执行攻击者的意图。

3. XSS攻击的示例

(1) 攻击者针对www.example.com的一个搜索页定制下面链接

http://www.example.com/search?query=<script>alert('XSS')</script>

(2) 攻击者将连接发送给被攻击者

(3) 被攻击者点开链接后,会执行嵌入的XSS脚本,从而实现攻击者的意图。(比如后去用户Session)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4. 如何预防和防御XSS攻击

从Web应用搭建的维度,可以通过下列措施防范XSS攻击

  • **入参的强校验&过滤:**服务器端对参数进行强校验,检查是否存在不安全的字符或脚本(carrot, <,>,/等),并过滤掉它们。所有恶意代码将被替换为相应的字符,它们将被禁止对用户浏览器执行。
  • **输出编码/转义:**将用户的输入作为消息从服务器返回时,确保将HTML标签和JavaScript等脚本代码中的特殊字符转义或编码。例如,将<>等字符编码为 <和>以避免它们被浏览器解释为HTML标签。
  • **使用HTTPOnly cookie:**HTTPOnly cookie在请求不被攻击者利用基于脚本的执行语言时无法访问,也不能通过document.cookie来访问。这一点可以有效的降低反射型XSS的压力。
  • **使用安全控件:**对于特殊页面(例如登录页面),使用验证码和其他安全性控件。

从用户的角度,可以通过下列措施防范XSS攻击

  • 提示用户小心恶意链接的存在,防止用户在没有意识到危险的情况下点击恶意链接。
  • 浏览器端X-XSS-Protection:这是一个现代浏览器提供的防御措施,可以在发现反射型XSS攻击时自动阻止并提供阻止攻击的选项。使用此功能的网站需要设置X-XSS-Protection标头,并将其设置为1来启用此功能: X-XSS-Protection: 1; mode=block。

四、存储型XSS攻击

1. 什么是存储型XSS攻击

存储型 XSS 攻击指的是攻击者将恶意脚本提交到受害网站的数据库中,当其他用户浏览包含该恶意脚本链接的页面时,就会执行该脚本,从而导致攻击者的目的得以实现。

由于是将恶意脚本保存在数据库中,所有访问包含恶意代码的页面的用户都受到攻击。而且这种攻击方式难解决。

2. 存储型XSS攻击的原理&步骤

(1)攻击者在受害网站上查找存在漏洞的输入表单,例如评论框或搜索框等。

(2)攻击者将恶意代码或脚本插入到输入表单中,以便在提交表单时存储到数据库中。例如,攻击者可以在评论框中插入一段 JavaScript 代码,用于窃取存储在 Cookie 中的会话标识符。

(3)网站接收到含有恶意代码的表单数据,将其存储到数据库中。此时,攻击者的恶意代码已经写入到数据库中并保存下来。

(4)受害用户访问这个包含恶意代码的页面时,恶意代码从数据库中提取出来并在受害用户的浏览器上执行,触发攻击者设定的操作。

(5)攻击者利用受害用户的会话标记等获取受害者的身份和敏感信息。例如,可以利用恶意脚本窃取用户的个人信息、登录凭据或信用卡信息,并发送给攻击者。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3. 如何防御存储型XSS攻击

存储型 XSS 攻击通常比反射型 XSS 攻击更难防止。以下是几种常见的防御措施:

  • **输入过滤和验证:**对用户的输入进行强校验。过滤不安全的字符,校验数据类型、长度和格式等是否合法,防止不安全的数据被存储。
  • **输出编码/转义:**在输出用户数据之前,对数据进行编码转义,可以使用 HTML 或 URL 编码来处理特殊字符、脚本和标记,以防止恶意代码被执行。
  • **防御性编程:**使用安全的 API、利用验证机制、进行限制访问控制。
  • **CSP:**Content Security Policy 可以设置白名单和黑名单,限制页面加载的资源类型和来源,防止恶意脚本和样式被加载。
  • **使用 HTTPS:**使用 HTTPS 可以防止攻击者在传输过程中窃取会话标识符和敏感数据等信息。
  • **限制和控制用户输入:**限制用户可以输入的数据内容、长度和格式。例如,可以使用 HTML5 的 input 标签提供的 pattern 属性限制用户输入的数据类型和格式。

存储型XSS攻击最好的防御措施是:

永远不要相信前端,永远不要相信用户的输入。

五、DOM型XSS攻击

1. 什么是DOM型XSS攻击

DOM 型 XSS 攻击是一种利用 DOM 基于 HTML 解析过程中的安全漏洞进行的跨站攻击。

DOM 型 XSS 攻击不涉及服务器的参与,完全基于客户端的机制,攻击者通过篡改网页中的 DOM 元素和属性,注入恶意代码进而达到攻击目的。

2. DOM型XSS攻击的原理和步骤

DOM型XSS攻击的过程与反射型XSS攻击极其类似,主要差异在于反射型XSS会把攻击脚本传递给服务器,而DOM型XSS不需要,从而可以达到绕过WAF、躲避服务端的检测效果。

DOM型XSS攻击通常分为以下几个步骤:

  1. 攻击者诱导用户访问一个恶意网站或者跨站点的合法网站。
  2. 网站中的 JavaScript 脚本将用户输入的数据组合成 DOM 片段。
  3. 攻击者篡改了 DOM 片段或者修改了 DOM 的属性,注入恶意的脚本,从而执行了非法行为。
  4. 当浏览器解析 DOM 片段时,执行了恶意脚本,使恶意代码被执行。
  5. 攻击者成功地窃取了用户敏感信息或者完成了其他非法操作。

3. 如何防御DOM型XSS攻击

DOM型XSS攻击可以通过下面的措施进行防御:

  • **输入过滤和验证:**对用户的输入进行强校验。过滤不安全的字符,校验数据类型、长度和格式等是否合法,防止不安全的数据被存储。
  • **输出编码/转义:**在输出用户数据之前,对数据进行编码转义,可以使用 HTML 或 URL 编码来处理特殊字符、脚本和标记,以防止恶意代码被执行。
  • **使用 innerText 或 textContent 而不是 innerHTML:**避免将用户输入的数据直接插入到 innerHTML 中。可以使用白名单机制过滤不安全的标记,或使用innerText、textContent 等安全的API。
  • **使用Content Security Policy(CSP):**CSP 可以设置白名单和黑名单,限制页面加载的资源类型和来源,从而防止恶意脚本和样式被加载。
  • **使用安全沙箱:**应用沙盒技术限制 JavaScript 运行的环境,从而可以防止恶意 JS 脚本操作或者篡改文档 DOM 等。
  • **更新和升级浏览器:**定期升级浏览器,减少已知红旗漏洞的影响。

六、总结

XSS攻击可以分为三种类型:反射型XSS攻击、存储型XSS攻击以及DOM型XSS攻击。

反射型XSS攻击是将攻击脚本注入到URL中,服务器解析时将注入代码反射到浏览器中,从而实现攻击目的。

存储型XSS攻击是攻击者将恶意脚本代码提交到受害网站的数据库中,当其他用户浏览包含该恶意脚本链接的页面时,就会执行该脚本,从而导致攻击者的目的得以实现。

DOM 型 XSS 攻击则是一种利用 DOM 基于 HTML 解析过程中的安全漏洞进行的跨站攻击,攻击者通过篡改网页中的 DOM 元素和属性,注入恶意代码从而窃取用户的敏感信息或实施其他违法操作。

针对上述三种XSS攻击,开发者应该实施多项安全措施。比如对输入和输出数据进行过滤和编码,限制用户的输入内容及长度、格式等,避免直接将用户输入内容放到 innerHTML 函数中;采用Content Security Policy(CSP)等安全措施来防御DOM型XSS攻击;使用安全沙箱、限制访问控制、升级浏览器等应对反射型 XSS 和存储型 XSS 攻击。开发者需要加强对 Xss攻击的了解及安全方案的实施,保护用户的网络安全。

附录

我的公众号

我的二维码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新的“缓冲区溢出攻击“,而JavaScript是新的“ShellCode”。 二、XSS漏洞的危害 (1)网络钓鱼,包括盗取各类用户账号; (2)窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作; (3)劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等; (4)强制弹出广告页面、刷流量等; (5)网页挂马; (6)进行恶意操作,例如任意篡改页面信息、删除文章等; (7)进行大量的客户端攻击,如DDoS攻击; (8)获取客户端信息,例如用户的浏览历史、真实IP、开放端口等; (9)控制受害者机器向其他网站发起攻击; (10)结合其他漏洞,如CSRF漏洞,实施进一步作恶; (11)提升用户权限,包括进一步渗透网站; (12)传播跨站脚本蠕虫等; 三、过滤器配置 web.xml配置 XssFilter com.xxx.Filter.XssFilter XssFilter /*

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值