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

XSS定义

  XSS, 即为(Cross Site Scripting), 中文名为跨站脚本, 是发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预期内执行的JS代码时,就发生了XSS攻击。html

跨站脚本的重点不在‘跨站’上,而在于‘脚本’上。大多数XSS攻击的主要方式是嵌入一段远程或者第三方域上的JS代码。其实是在目标网站的做用域下执行了这段js代码。前端

攻击手段:

  1.盗用cookie  获取敏感信息git

  2.破坏页面结构  插入恶意内容(反射性)github

  3.利用flash(了解)web

  4.DDOS(强大 难以防护)数据库

    DDOS:分布式拒绝服务攻击(Distributed Denial of Service),简单说就是发送大量请求是使服务器瘫痪。DDos攻击是在DOS攻击基础上的,能够通俗理解,dos是单挑,而ddos是群殴,由于现代技术的发展,dos攻击的杀伤力下降,因此出现了DDOS,攻击者借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标进行攻击。express

在技术角度上,DDoS攻击能够针对网络通信协议的各层,手段大体有:TCP类的SYN Flood、ACK Flood,UDP类的Fraggle、Trinoo,DNS Query Flood,ICMP Flood,Slowloris类等等。通常会根据攻击目标的状况,针对性的把技术手法混合,以达到最低的成本最难防护的目的,而且能够进行合理的节奏控制,以及隐藏保护攻击资源。npm

下面介绍一下TCP协议中的SYN攻击。浏览器

 常见的web攻击总结:http://www.javashuo.com/article/p-sdrhzktr-gu.html安全

攻击方式:

  反射型

    发出请求时,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-WebSecurity

  

 

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

 

相关资料:

相关文章
相关标签/搜索