原理:前端代码注入
条件:
1.用户能够控制输入
2.程序执行的代码拼接了用户输入的数据。
类型
反射型XSS:必须一次性输入所有恶意语句,利用条件苛刻
存储型XSS:持久性,将我们的恶意语句存储起来再触发(存储到了服务器)
DOM型XSS:基于DOM对象的XSS
常见的触发检测方法
利用script弹窗标签 :<script>alert(1)</script> alert(1):利用弹窗来验证是否触发XSS
伪协议:<a href =javascript:alert(1) >1</a>
事件法:<a onmousemove=alert(1)>1</a>
<img src=# onerror=alert(1) />
(其他事件可以参考:https://www.w3school.com.cn/jsref/jsref_events.asp)
补充:
同源策略
同协议、同端口、同域名
http-only: cookie里的一个属性,开启以后就不能利用js去读取页面的cookie
利用:XSS平台
危害:
1、Cookie的窃取 (☆☆☆☆☆)
2、内网渗透
3、钓鱼
4、获取浏览器保存的明文密码
5、截屏
XSS怎么防御:
1、过滤 => 不让你输入危险的字符
2、httponly => 让JS无法读取到Httponly保护的Cookie字段
3、HTML实体化 => 转义成没有危险的字符
绕过http-only:找到phpinfo,可以查看到cookie
DOM是一个与平台、编程语言无关的接口, 用来传递数据.
1.JS脚本可以动态地访问和更新文档内容、结构和样式
2.JS利用dom的接口可以动态的改变网页的内容
大部分的dom型XSS都是不和目标服务器进行交互的
DOM型XSS常见的三种状态
-
Document.write 在页面上面写内容。 下述代码的含义是获取URL里面的name的传参然后输出在页面,它可以接受native编码值
转码地址:http://tool.oschina.net/encode?type=3
!
-
innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML,以下代码是重新设置id=zkaq的标签里面的值
-
eval 把字符串当代码执行,这里是获取锚点后的值然后放入eval