web安全浅谈web安全之XSS
Posted websmile
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web安全浅谈web安全之XSS相关的知识,希望对你有一定的参考价值。
XSS定义
XSS, 即为(Cross Site Scripting), 中文名为跨站脚本, 是发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预期内执行的JS代码时,就发生了XSS攻击。
跨站脚本的重点不在‘跨站’上,而在于‘脚本’上。大多数XSS攻击的主要方式是嵌入一段远程或者第三方域上的JS代码。实际上是在目标网站的作用域下执行了这段js代码。
攻击手段:
1.盗用cookie 获取敏感信息
2.破坏页面结构 插入恶意内容(反射性)
3.利用flash(了解)
4.DDOS(强大 难以防御)
DDOS:分布式拒绝服务攻击(Distributed Denial of Service),简单说就是发送大量请求是使服务器瘫痪。DDos攻击是在DOS攻击基础上的,可以通俗理解,dos是单挑,而ddos是群殴,因为现代技术的发展,dos攻击的杀伤力降低,所以出现了DDOS,攻击者借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标进行攻击。
在技术角度上,DDoS攻击可以针对网络通讯协议的各层,手段大致有:TCP类的SYN Flood、ACK Flood,UDP类的Fraggle、Trinoo,DNS Query Flood,ICMP Flood,Slowloris类等等。一般会根据攻击目标的情况,针对性的把技术手法混合,以达到最低的成本最难防御的目的,并且可以进行合理的节奏控制,以及隐藏保护攻击资源。
下面介绍一下TCP协议中的SYN攻击。
常见的web攻击总结:https://www.cnblogs.com/morethink/p/8734103.html#DDOS
攻击方式:
反射型
发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程想一次反射,故叫反射型XSS
存储型(持久型XSS漏洞)
存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次请求目标页面时不用再提交XSS代码
DOM XSS
DOM XSS攻击不同于反射型XSS和存储型XSS,DOM XSS代码不需要服务器端的解析响应的直接参与,而是通过浏览器端的DOM解析。这完全是客户端的事情。
DOM XSS代码的攻击发生的可能在于我们编写JS代码造成的。我们知道eval语句有一个作用是将一段字符串转换为真正的JS语句,因此在JS中使用eval是很危险的事情,容易造成XSS攻击。避免 使用eval语句。
XSS的反射型攻击演示
构建Node服务进行演示
-
1.新建文件夹,命令行输入:
express -e ./
使用express脚手架,用ejs作为模板引擎,在当前目录执行npm install
安装依赖
-
2.在routes/index.js下设置路由:
router.get(‘/‘, function(req, res, next) res.set(‘X-XSS-Protection‘,0); //关掉浏览器对XSS的检测 res.render(‘index‘, title:‘Express‘,xss:req.query.xss ); ); //query是express获取search的字段
-
3.在views/index.ejs中的body部分添加:
<div class=""> <%- xss %><!--‘-‘表示允许输入html,不需要转义--> </div>
-
4.命令行输入:
npm start
开启服务器 -
5.在http://localhost:3000/后输入
?xss=<iframe src="//baidu.com/h.html"></iframe>
或者?xss=<img src="null" onerror="alert("1")">
或者?xss=<p onclick="alert("1")">点我</p>进行模仿XSS的放射型攻击。第一个效果如下图:
XSS的防御措施
对cookie保护
对重要的cookie设置httpOnly, 防止客户端通过document.cookie
读取cookie。服务端可以设置此字段。
对用户输入的内容
1.编码:对用户输入的数据进行HTML Entity编码
2.解码:
避免直接对HTML Entity编码
使用DOM Parse转码,校正不配对的DOM标签
3.过滤:
移除用户上传的DOM属性,如onerror,onclick等
移除用户上传的Style节点、Script节点、 iframe节点等
XSS评论代码注入防御demo
1.文本由服务器端转义,客户端反转义,再DomParse,再过滤
2.使用encode.js和domparse.js第三方库对文本进行解码和DOM parse操作
项目链接:https://github.com/ickedesign/XSS_WebSecurity
扩展:其他的web安全知识
相关资料:
以上是关于web安全浅谈web安全之XSS的主要内容,如果未能解决你的问题,请参考以下文章