XSS 攻击(详细)

目录

引言

一、XSS 攻击简介

二、XSS 攻击类型

1.反射型 XSS

2.存储型 XSS

3.基于 DOM 的 XSS

4.Self - XSS

三、XSS 攻击技巧

1.基本变形

2.事件处理程序

3.JS 伪协议

4.编码绕过

5.绕过长度限制

6.使用标签

四、XSS 攻击工具与平台

1.XSS 攻击平台

2.BEEF

五、XSS 相关案例 - XSS 蠕虫

六、XSS 防御方法

1.输入输出过滤

2.HttpOnly Cookie

3.内容安全策略(CSP)

4.验证输入数据类型和格式

5.JavaScript 框架与 XSS

5.1-jQuery

5.2-Vue.js

5.3-AngularJS

6.富文本与安全问题

6.1-富文本的风险

6.2-处理方法

7.旧版浏览器的安全隐患

小结


引言

在当今数字化时代,网络应用与人们的生活、工作深度融合,Web安全的重要性愈发凸显。XSS攻击,作为Web安全领域中极为常见且危害巨大的漏洞类型,正悄然威胁着每一位网络用户和网站运营者。你是否曾想过,当你在浏览网页、登录账户、输入信息时,背后可能隐藏着怎样的风险?看似平常的操作,或许正被恶意攻击者利用XSS漏洞窥探隐私、窃取数据。从电商平台用户账号被盗刷,到社交网站个人信息泄露,XSS攻击的阴影无处不在。本文将带你深入了解XSS攻击的方方面面,从攻击类型、技巧,到实际案例和防御方法,为你揭开这一网络安全威胁的神秘面纱,帮助你筑牢网络安全防线。

一、XSS 攻击简介

XSS,即跨站脚本攻击,是 Web 安全领域中十分常见的漏洞类型。攻击者通过在 Web 页面中注入恶意脚本,当用户浏览该页面时,恶意脚本便会在用户的浏览器中执行。借助这种攻击方式,攻击者能够窃取用户的敏感信息,如登录凭证、个人隐私数据等;劫持用户会话,以用户身份进行各种操作;甚至篡改网站内容,严重损害网站的声誉和用户信任。举例来说,某电商网站若存在 XSS 漏洞,攻击者可通过注入恶意脚本,窃取用户的账号密码,进而盗刷用户的账户资金,给用户带来直接的经济损失。

二、XSS 攻击类型

1.反射型 XSS

反射型 XSS 攻击的脚本通常存在于 URL 中,服务器在接收到请求后,会直接将包含恶意脚本的内容返回给浏览器执行。这种攻击属于非持久性攻击,一般是攻击者通过诱骗用户点击包含恶意脚本的链接来实施攻击。例如,攻击者构造链接 “http://example.com/search?query=alert('XSS')”,当用户点击该链接时,服务器将恶意脚本反射回浏览器,进而执行弹窗操作。下面是一个简单的 Python Flask 示例,展示反射型 XSS 漏洞:

from flask import Flask, request

app = Flask(__name__)

@app.route('/search')

def search():

    query = request.args.get('query')

    return f'{query}'

if __name__ == '__main__':

app.run(debug=True)

2.存储型 XSS

存储型 XSS 攻击会将恶意脚本存储在服务器端,比如数据库中。当其他用户访问包含该恶意脚本的页面时,脚本就会被加载并执行,这是一种持久性攻击,危害较大。以留言板功能为例,攻击者在留言内容中插入恶意脚本,如 “alert('Stored XSS')”,后续访问留言板的用户都会触发该脚本。以下是 PHP 实现的存在存储型 XSS 漏洞的留言板代码:

3.基于 DOM 的 XSS

基于 DOM 的 XSS 攻击通过修改页面的 DOM 结构来注入恶意脚本,它是从客户端的 JavaScript 代码中执行的,与服务器交互数据没有直接关联。攻击者利用 JavaScript 中对 DOM 对象操作的函数,当这些函数的参数受用户输入影响且未经过严格安全处理时,就可能引发漏洞。比如,当页面中有代码 “document.getElementById ('target').innerHTML = userInput;”,若 userInput 被攻击者控制并输入恶意脚本 “alert('XSS')”,页面在执行这段代码时就会弹出警告框,实现 XSS 攻击。下面是一个 HTML 和 JavaScript 示例:







DOM - XSS Example









4.Self - XSS

Self - XSS 是指用户自己将恶意脚本输入到应用程序中,通常是由于用户自身安全意识不足导致的,并非攻击者直接注入。例如,用户为了实现某些特定效果,在应用允许的输入框中输入恶意脚本,从而触发 XSS 攻击。

三、XSS 攻击技巧

1.基本变形

攻击者会对恶意脚本进行编码变形,如使用 Unicode 编码或特殊字符,以绕过安全过滤机制。例如,将 “alert('XSS')” 编码为 “”,部分仅检测明文恶意代码的过滤系统可能无法识别。





    
    
    基本变形 XSS 示例



    
    
    
    


2.事件处理程序

利用 HTML 元素的 onclick、onmouseover 等事件属性,当用户触发相应事件时,执行恶意代码。例如,在 “” 中,当图片无法加载时,就会触发 onerror 事件,执行恶意脚本。





    
    
    事件处理程序 XSS 示例



    
    
    
    
鼠标悬停此处

3.JS 伪协议

通过 “javascript:” 伪协议在 URL 中嵌入 JavaScript 代码,当用户点击链接时,恶意脚本就会执行。例如,链接 “Click me”,用户点击后会弹出警告框。





    
    
    JS 伪协议 XSS 示例



    
    Click me


4.编码绕过

将恶意脚本进行 Unicode 编码、HTML 实体编码等,绕过只检测明文恶意代码的过滤系统,在浏览器解析时还原执行。如将 “<” 编码为 “<”,“>” 编码为 “>”。





    
    
    编码绕过 XSS 示例



    
    


5.绕过长度限制

攻击者会把长 Payload 分割成短片段,在页面中进行拼接;或者利用 window.name 属性跨页面传递长 Payload。例如,将恶意脚本拆分成多个部分,通过多个 JavaScript 变量存储,再进行拼接执行。





    
    
    绕过长度限制 XSS 示例



    


6.使用标签

在 XSS 攻击中,攻击者常常巧妙利用各种 HTML 标签来达成恶意目的。许多 HTML 标签本身具备特殊功能,若被攻击者利用,就能注入恶意脚本,进而在用户浏览器中执行。

在此示例里,恶意网站的页面可能含有窃取用户信息的脚本,一旦用户加载了包含此