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

    相关资料:

        

  • 相关阅读:
    LeetCode-079-单词搜索
    awk学习笔记
    Python实现排列组合算法
    python模拟登录人人
    Python的SQLite数据库使用方法
    C语言排序算法——插入排序算法
    C语言排序算法——简单选择排序算法
    C语言排序算法——冒泡排序算法
    Python学习——python的函数参数传递
    Python学习——实现secure copy功能
  • 原文地址:https://www.cnblogs.com/websmile/p/11428911.html
Copyright © 2020-2023  润新知