XSS 漏洞(js代码可控)
XSS 被称为跨站脚本攻击(Cross-site scripting),本来应该缩写为CSS,但是由于和CSS(Cascading Style Sheets,层叠样式脚本)重名,所以更名为XSS。XSS(跨站脚本攻击)主要基于javascript(JS)完成恶意的攻击行为。JS 可以非常灵活的操作html、css和浏览器。
XSS 通过将精心构造的代码(JS)注入到网页中,并由浏览器解释运行这段JS 代码,以达到恶意攻击的效果。当用户访问被XSS 脚本注入的网页,XSS 脚本就会被提取出来。用户浏览器就会解析这段XSS 代码,也就是说用户被攻击了。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascript解释器,可以解析javascript,然而浏览器不会判断代码是否恶意。
微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS 代码,都存在遭受XSS 的风险,只要没有对用户的输入进行严格过滤,就会被XSS 。
JS 代码
JS 全称是JavaScript。
JS 运行的环境是浏览器,具体点说,主流浏览器都有JS 引擎。
操作HTML DOM、CSS 和浏览器
document.cookie =“”
XSS 危害
123456789
<script>alert(/xss/)</script>
输出正常的字符<script>
cookie盗取
站点重定向
XSS蠕虫
获取客户端页面信息,例如邮件内容窃取
漏洞分类
XSS 漏洞大概可以分为三个类型:反射型XSS、存储型XSS、DOM 型XSS
反射型XSS
恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击。
存储型XSS
当一个页面存在存储型XSS的时候,插入的恶意代码会存储到数据库中。当访问此页面查看留言时,web程序会从数据库中取出恶意代码插入到页面,导致浏览器触发xss。
DOM型XSS
修改DOM节点形成xss。类似于反射型的xss。反射型和存储型都是服务器端将代码反馈到了源码中,在源代码里可以看到xss的代码。DOM型号XSS只与客户端上的js交互,也就是说提交的恶意代码被放到了js中执行,然后显示出来。
从上到下,从左至右
漏洞利用
固定会话攻击
XSS 攻击有两大要素:
- 攻击者提交恶意代码。
- 浏览器执行恶意代码。
XSS防御
1、对输入和URL参数进行过滤(白名单和黑名单)
检查用户输入的数据中是否包含一些特殊字符,如<、>、’、“等,发现存在特殊字符,将这些特殊字符过滤或者编码。
2、HTML实体编码
字符串js编码转换成实体html编码的方法(防范XSS攻击)
3、对输出内容进行编码
在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。