XSS脚本攻击
定义:
XSS全称(Cross Site Scripting)跨站脚本攻击,XSS属于客户端攻击,受害者最终是用户(网站管理员也属于用户),常用语言为JavaScript(也有其他语言)
原理:
程序对输入输出控制不够严格,进而脚本输入后,在输出到前端被浏览器当作正常代码解析从而产生危害,输入输出条件必须同时满足
万能代码框架
'"><script>alert(1)</script>
XSS分类:
反射型XSS
- 交互的数据一般不会被存在在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性,所见即所得。(中危)
储存型XSS
- 交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性 (高危)
DOM XSS
- 不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞 (低危)
XSS可能存在的地方
·HTML Context
·Attribute Context
·URL Context
·style Context
·Script Context
XSS的危害
·劫持用户cookie
·框架钓鱼
·挂马
·键盘记录
测试XSS的方法
工具
-
APPscan、AWVS、Burpsuite 等
-
半自动化工具
-
Burpsuite、firefox(hackbar)、XSSER XSSF等
手工
- 最重要的是考虑那里有输入,输入的数据在什么地方输出
防范方法
·输入过滤,输出编码,具体见https://www.cnblogs.com/cute-puli/p/11099543.html
同源策略
什么是跨域
- 当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域。我们把不同的域之间请求数据的操作,成为跨域操作。
同源策略
- 为了安全考虑,所有浏览器都约定了“同源策略”,同源策略禁止页面加载或执行与自身来源不同的域的任何脚本既不同域之间不能使用JS进行操作。比如:x.com域名下的js不能操作y.com域名下的对象
那么为什么要有同源策略? 比如一个恶意网站的页面通过js嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。
不受同源策略限止
- <script src="..."> //加载本地js执行
- <img src="..."> //图片
- <link href="..."> //css
- <iframe src="..."> //任意资源
同源策略修改
- 后台设置好Access-Control-Allow-Origin,设置为*,既允许所有人访问
XSS绕过
·前端限制绕过
·大小写混合
·拼凑绕过
·编码
·注释干扰后台绕过
htmlspecialchars()函数
-
htmlspecialchars()函数的作用
-
& (和号)成为 &
-
" (双引号)成为 "
-
’ (单引号)成为'
-
< (小于)成为 <
-
->(大于)成为 >
-
htmlspecialchars()函数配置参数
-
可用的quotestyle类型:
ENT_COMPAT - 默认。仅编码双引号 (可绕过)
ENT_QUOTES - 编码双引号和单引号(a标签可绕过)
ENT_NOQUOTES - 不编码任何引号