XSS漏洞分哪几种?反射型、存储型、DOM型怎么区分?

冬瑶酱_8177

冬瑶酱_8177

2026-11-11

789人浏览

原创

xss漏洞主要分为反射型、存储型和dom型三种。区分它们的核心依据是恶意脚本的来源与执行路径:反射型需要用户点击包含payload的链接,脚本由服务器临时返回;存储型将payload持久化保存在数据库或文件中,任何访问该页面的用户都会中招;dom型则完全在浏览器端通过javascript操作dom树完成,不经过服务端处理。

XSS漏洞分哪几种?反射型、存储型、DOM型怎么区分?

反射型XSS的工作流程是怎样的

反射型XSS(Reflected XSS)要求攻击者构造一个包含恶意脚本的URL,诱骗受害者点击。当受害者请求该URL时,服务器端的代码通常会直接读取URL中的参数(如搜索关键词),并将其未经充分过滤地嵌入到HTML响应中返回给浏览器。浏览器解析这段包含<script>&#26631;&#31614;&#30340;&#21709;&#24212;&#26102;&#65292;&#23601;&#20250;&#25191;&#34892;&#20854;&#20013;&#30340;&#24694;&#24847;&#20195;&#30721;&#12290;&#36825;&#31181;&#25915;&#20987;&#26159;&#19968;&#27425;&#24615;&#30340;&#65292;&#33050;&#26412;&#19981;&#20250;&#22312;&#26381;&#21153;&#22120;&#19978;&#30041;&#19979;&#30165;&#36857;&#12290;</script>

XSS漏洞分哪几种?反射型、存储型、DOM型怎么区分?

from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/search')
def search():
    # 获取URL参数 q
    query = request.args.get('q', '')
    # 直接将用户输入渲染到模板中,未做转义
    template = 'You searched for: <b>{{ query }}</b>'
    return render_template_string(template, query=query)

if __name__ == '__main__':
    app.run(debug=True)

预期结果:当访问 /search?q=<script>alert(1)</script> 时,页面会弹出一个警告框,显示“1”。这是因为 query 变量被直接插入到了HTML中,浏览器将其识别为可执行脚本。

存储型XSS的危害范围有多大

存储型XSS(Stored XSS),也称为持久型XSS,其危险性远高于反射型。攻击者提交的恶意脚本会被服务器接收并保存到后端数据库、日志文件或文件系统中。随后,当其他用户浏览受影响的页面(如查看帖子、评论列表)时,服务器会从数据库中取出这些恶意数据,并将其作为正常内容发送给受害者的浏览器。这意味着一次注入,永久生效,所有访问该页面的用户都可能成为受害者,无需诱导点击特定链接。

XSS漏洞分哪几种?反射型、存储型、DOM型怎么区分?

iTerms
iTerms

一款AI工具,主要用于法大大AI法律顾问,适合需要提升相关任务效率的用户。

下载
import sqlite3
from flask import Flask, request, render_template_string

app = Flask(__name__)
db = sqlite3.connect('test.db')
cursor = db.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS comments (id INTEGER PRIMARY KEY, content TEXT)')
db.commit()

@app.route('/comment', methods=['POST'])
def add_comment():
    content = request.form.get('content', '')
    # 将用户输入直接存入数据库
    cursor.execute("INSERT INTO comments (content) VALUES (?)", (content,))
    db.commit()
    return 'Comment added'

@app.route('/view')
def view_comments():
    cursor.execute('SELECT content FROM comments')
    comments = cursor.fetchall()
    # 直接从数据库取出数据并渲染,未做转义
    html = '' + ''.join(['<p>' + c[0] + '</p>' for c in comments]) + ''
    return html

if __name__ == '__main__':
    app.run(debug=True)

预期结果:首先通过POST请求提交 content=<script>alert(document.cookie)</script>,然后访问 /view 页面。此时,所有加载该页面的用户浏览器都会执行 alert(document.cookie),窃取当前用户的Cookie信息。脚本被存储在数据库中,每次访问 /view 都会触发。

DOM型XSS在服务端有交互吗

DOM型XSS(DOM-based XSS)与前两种类型的最大区别在于它不涉及服务端的逻辑处理。恶意脚本的执行完全发生在客户端的JavaScript代码中。攻击者构造的Payload通常通过URL片段(Hash部分)、查询参数或其他客户端数据源进入页面。前端JavaScript代码在读取这些数据源后,使用不安全的方法(如 innerHTML、 document.write() 或 eval())将其写入DOM树中,从而触发脚本执行。由于整个过程都在浏览器内完成,服务器可能根本不知道Payload的存在,因此传统的WAF(Web应用防火墙)往往难以检测。



    <div id="output"></div>
    <script>
        // 获取URL中的hash部分
        const hash = window.location.hash.substring(1);
        // 直接将hash内容写入DOM,未做转义
        document.getElementById('output').innerHTML = hash;
    </script>

预期结果:当访问 page.html# 时,页面中的 div 元素会被插入 标签,触发 onerror 事件弹出警告框。服务器只返回静态HTML文件,不参与Payload的处理和返回过程。

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

60

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

40

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

40

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

60

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

60

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

60

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

60

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

60

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.3万人学习