【web安全】浅谈web安全之XSS

假装没事ソ 提交于 2020-02-25 17:28:50

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安全知识

 

相关资料:

    

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!