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的一个搜索页定制下面链接

bash 复制代码
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攻击的了解及安全方案的实施,保护用户的网络安全。

附录

我的公众号

相关推荐
xuan哈哈哈3 小时前
web基础—dvwa靶场(九)Weak Session IDs
web安全·网络安全
huaiyanchen4 小时前
chorme浏览器 您的连接不是私密连接
安全
安全方案6 小时前
政务安全运营核心能力模块
安全
无敌的俊哥7 小时前
dedecms——四种webshell姿势
web安全
aqymnkstkw7 小时前
2024年【电气试验】考试题库及电气试验模拟试题
大数据·c语言·人工智能·嵌入式硬件·安全
xiaojiesec7 小时前
第157天: 安全开发-Python 自动化挖掘项目&SRC 目标&FOFA 资产&Web 爬虫解析库
python·安全
亿林科技网络安全8 小时前
阿里云盘照片事件!网络安全警钟长鸣
网络·安全·web安全
玄客)9 小时前
MACCMS 远程命令执行漏洞复现(CVE-2017-17733)
学习·安全