☰
XSS(跨站脚本)pikachu
2026/9/27 8:01:05 网站建设 项目流程

概述

全称:Cross-Site Scripting,简称“CSS”;取名XSS为了与CSS(层叠样式表)区分

本质:攻击者将恶意脚本注入到正常网页中,当用户访问该页面时,脚本在受害者浏览器内执行

注意:web漏洞,前端,攻击目标是访问网站的用户,不是网站服务器本身

原理:网站没有对用户输入的内容做足够过滤/转义,直接把用户可控数据输入到HTML页面里,受害者打开页面,浏览器分不清这段内容是正常代码还是恶意脚本,就会执行恶意JS

输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入

输出转义:根据输出点的位置对输出到前端的内容进行适当转义

常见危害:1.盗取用户Cookie、Session,劫持账号、页面操作 2.窃取页面敏感信息(手机号、卡号、密码) 3.伪造页面弹窗,欺骗用户输入账号密码(钓鱼) 4.诱导跳转至恶意网站 5.配合其他漏洞进一步内网渗透

目的:攻击者输入内容,被浏览器弹出弹窗,证明此处可以执行JS,存在XSS漏洞

反射型XSS(get)

定义:非持久型,恶意代码放在GET请求的URL参数中

原理:攻击者构造恶意URL,把payload放在GET参数里,把这个链接发给受害者,通过聊天、邮件、钓鱼等,服务器代码直接取出GET参数请求,q参数携带恶意脚本传给服务器,服务器不经转义拼到HTML页面中返回,受害者浏览器收到页面,解析标签,执行恶意JS

步骤:

1.F12打开查看器,定位到,发现最大长度只有20,修改为100

<input class="xssr_in" type="text" maxlength="20" name="message">

2.常用测试语句

<script>alert('123')</script>

3.输入语句到输入框,出现弹窗

知识:

一.URL→统一资源定位符,结构【协议://域名:端口/路径?查询参数#片段】

二.?q=xxx→GET查询参数;多个参数值用&隔开;可以直接写在URL出现在浏览器地址可复制转发

三.HTML脚本<script>开始/结束</>标签,目的告诉浏览器里面的内容是JavaScript代码,需要执行

四.alert(‘123’):JS内置函数,作用是浏览器弹出弹窗,显示内容123(显示内容可随意,无危害只证明)

反射型XSS(post)

定义:非持久型,恶意payload放在POST请求的表单参数里,提交表单后服务器读取,直接反射输出到页面,恶意代码不会存入数据库

原理:恶意代码不会出现在浏览器地址,不能直接把带payload的链接发给别人

两者比较:本质一样,服务器直接回显用户输入,只是传参方式不同

步骤:

1.输入暴力破解的账号密码admin/123456,Login

2.输入常用测试语句,出现弹窗

查看POST参数:

放在HTTP请求体(body)

一.浏览器

  1. 打开网页,按 F12(右键→检查)调出开发者工具,切换到 Network(网络)面板

  2. 勾选 Preserve log(保留日志),防止页面跳转后请求消失,在页面提交表单(输入 payload,点提交)

  3. 在网络列表找到Method 为 POST的那一条请求,点击它切换到 Payload(载荷) 标签:普通表单(application/x-www-form-urlencoded):Form Data(表单数据)

二.抓包工具

Burp Suite:抓包代理,浏览器流量经过 Burp,可以直接查看 / 修改 POST 请求体,改 payload 测试 POST XSS

存储型XSS

定义:也叫持久型XSS,攻击者提交恶意payload,恶意脚本被保存到服务器的数据库/文件中。当其他用户访问该页面时,服务器从数据库读取恶意内容输出网页,浏览器执行JS,触发XSS

与反射型XSS比较:在服务端保存,不是一次性的,所有访问页面的用户都会中招,不需要钓鱼链接

场景:留言板、评论区、发帖论坛、个人签名、博客评论

步骤:

1.输入常用测试语句<script>alert('123')</script>

2.出现弹窗

辅助判断:查看页面源代码(F12),源码可以找到<script>alert('123')</script>存入数据库

DOM型XSS

定义:基于文档对象模型的XSS,整个过程恶意代码不会传给服务器,服务器返回正常页面。漏洞发生在浏览器前端,由JavaScript操作DOM时把可控数据插入页面,导致JS执行

步骤:

1.随便输入一串字符串456,在(F12)页面源代码可以发现,超链接标识

<a href="456"> what do you see? </a>

2.点开超链接,发现页面跳转404

3.直接在页面源代码进行注入(超链接标签改动),构造onclick(点击时触发),让XSS弹窗在点击超链接后面

<input id="text" name="text" type="text" value=""> 空白 <input id="button" type="button" value="click me!" οnclick="domxss()">

4.上面代码是提示,输入框输入

' οnclick=alert('123')>

5.出现 '>what do you see? ,点击超链接出现弹窗

知识:

在XSS攻击事件处理器常用于触发恶意JS代码

①onclick(点击时触发)②onerror(加载失败时触发)③onmouseover(鼠标悬停时触发)

DOM型XSS-X

定义:DOM型XSS-X属于DOM型XSS的变种,其核心是把URL参数直接拼到<a href='用户可控数据'>里面

步骤:

1.输入框输入

' οnclick=alert('123')>

2.点击文字,出现弹窗

两者对比

项目普通 DOM XSSDOM 型 XSS-X
数据来源location.hash(#,不发给服务器)location.search(?,GET 参数发给服务器)
注入位置页面文本内容a 标签 href 属性内
触发方式页面加载完成自动执行需要用户点击生成的链接
Payload<script>alert(1)</script>javascript:alert(1)伪协议

XSS盲打

定义:属于特殊场景的存储型XSS,其特点是注入点和触发页面分开,前端提交完看不到弹窗,攻击者不知道payload有没有生效,等管理员去后台查看数据触发

步骤:

1.留言板输入恶意payload,大名随意

<script>alert('123')</script>

2.只提示谢谢参与,没有弹窗

3.最右边的提示信息中有后台地址,进入,有新提示信息登录账号和密码admin/123456

4.登录成功出现弹窗

知识:

盲打用alert只能管理员自己看到弹窗,攻击者拿不到信息,实战多用脚本把管理员Cookie发送到攻击者服务器,管理员一打开后台页面,Cookie自动发送到攻击者接收平台

XSS过滤

定义:输入层防御,服务器在接收用户提交的数据时,对输入内容进行检查、删除、替换等,试图阻止恶意payload提交到服务器

之前的<script>alert('123')</script>被过滤掉没有用了

可用示例(还有其他):

1.大小写绕过:<sCrIPT>alert(123)</ScRiPt>

2..事件绕过:过滤 script 标签,用<img src=x onerror=alert(123)>

都分别出现弹窗

知识:

输入过滤不能作为防御XSS的唯一手段,很容易被绕过,攻击者可以构造变形payload绕过正则过滤

正则过滤:正则表达式(Regular Expression)

XSS 过滤 和 输出转义 的区别

  1. 输入过滤:在接收用户输入的时候做,清洗危险内容;容易被绕过,是辅助防御

  2. 输出转义(HTML 实体编码):在数据输出到 HTML 页面时做,把< > & " '转成实体;让浏览器把内容当成纯文本,从根源阻止浏览器解析标签,是最可靠的主防御方案

XSS之htmlspecialchars()

定义:htmlspecialchars()是PHP的函数,输出转义函数

作用:把HTML特殊字符转换成HTML实体编码,让浏览器只当成纯文本显示,不会解析成HTML标签

转换规则:&→&amp;// <→&lt;// >→&gt;// "→&quot;// '→&#039;

原始payload:<script>alert('123')</script>转义后

&lt;script&gt;alert(1)&lt;/script&gt;

输入:'οnclick='alert(123)即可出现弹窗

利用单引号闭合原有的属性,注入新事件

XSS之href输入

定义:可控输入写入a标签href属性,通过JavaScrit:伪协议执行JS,,专门在链接属性中使用

输入:Javascript:alert(123)或者Javascript:alert(" '123' "),点击后出现弹窗

知识:alert函数只会弹出对话框,只显示字符串内容,不显示引号,如需应在外加一层

XSS之js输入

定义:用户可控数据,放到<script></script>标签内部

解释:'→闭合前面字符串,//→注释掉后面剩余引号

步骤:

1.根据提示输入tmac

2.右键查看页面源代码在923行之后可以看到有输入变化,利用此进行标签闭合

3.输入';javascript:alert(123)//出现弹窗

部分内容由AI辅助生成

个人观点仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询