美文网首页前端开发
WEB安全之XSS漏洞

WEB安全之XSS漏洞

作者: 无远弗届_90 | 来源:发表于2019-03-12 20:28 被阅读156次

    跨站脚本攻击(Cross
    Site Scripting)。这是一种将恶意Javascript代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。自1996年诞生以来,如今已经历十多年的演化。由于和另一种网页技术-层叠样式表(Cascading Style Sheets,CSS)的缩写一样,为了防止混淆,故把原本的CSS简称为XSS。在各种WEB应用安全漏洞中,XSS跨站脚本攻击漏洞一直被OWASP(Open Web Application Security Project)组织评为十大应用安全之一。

    流程

    xss注入简单流程.png

    以博客留言板为例:

    用户一般都是按照正常的语言文字在留言板进行留言。假如有一个攻击者,别有用心,反其道而行之,留言不再是一段正常的文字,而是输入了一串JavaScript脚本,如

    <script>alert("your are so fool")</script>
    

    此时网页的结构则变成如下形式:

    <html>
      <title>XSS TEST</title>
      <body>
            五楼:<script>alert("your are so fool")</script>
      </body>
    </html>
    

    一旦用户浏览留言板,此段JavaScript脚本变会被浏览器解析,返回给用户,造成XSS漏洞。这就是最简单形式的XSS漏洞。

    常见的恶意脚本形式

    针对XSS漏洞,一般比较常见的脚本形式如下:

    1、利用XSS弹警告窗:

    <script>alert(‘xss’)</script>
    

    2、获取cookie形式:

    <script>alert(document.cookie)</script>
    

    3、嵌入其他网站:

    <iframe src=http://baidu.com width=0 height=0></iframe>
    

    4、XSS输入也可能是HTML代码段,如使网页不停刷新:

    <meta http-equiv="refresh" content="0;">
    

    危害

    ①网络钓鱼,包括盗取各类用户账号。

    ②窃取用户cookie资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作。

    ③劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账,强制发表日志,发送电子邮件等。

    ④强制弹出广告页面,刷流量等。

    ⑤网页挂马。

    ⑥进行恶意操作,例如任意篡改页面信息,删除文章等。

    ⑦进行大量的客户端攻击,如DDOS攻击。

    ⑧获取客户端信息,例如用户的浏览历史,真实ip,开放端口等。

    ⑨控制受害者机器向其他网站发起攻击。

    ⑩结合其他漏洞进一步扩大攻击。

    分类

    xss根据攻击类型可分为如下三种形式:

    1、反射型XSS

    2、存储型XSS

    3、DOM-based XSS

    下面就具体的类型进行讲解。

    反射型XSS

    ​ 反射型XSS也被称为非持久性XSS,是现在最容易出现的一种XSS漏洞。当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。

    反射型XSS.png,图片来源于互联网

    ​ 反射型XSS其基本思想就是依靠站点服务端返回脚本,在客户端触发执行从而发起Web攻击。例如,在搜索框中输入如下脚本:

    <script>alert(0)</script>
    

    点击搜索,页面弹出alert对话框。

    存储型XSS

    ​ 存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本。允许用户存储数据的WEB应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当再次访问页面时,这段XSS代码被程序读取响应给浏览器,造成XSS跨站攻击。

    存储型XSS.png,图片来源于互联网

    ​ 与反射型不同的是,存储型XSS属于二次渲染的漏洞,它首先会被持久化,然后从持久化中读取到页面,被页面渲染产生。如新增一个用户,将用户名写成如下形式:

    <script>alert(0)</script>
    

    保存后,如果未对用户名进行过滤,第二次访问用户信息时,会弹出alert窗体。

    DOM-based XSS

    ​ DOM的全称为Document Object Model,即文档对象模型,DOM通常用于代表在HTML、XHTML和XML中的对象。使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式。

    ​ 通过JavaScript可以重构整个HTML页面,而要重构页面或者页面中的某个对象, JavaScript就需要知道HTML文档中所有元素的“位置”。而DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。根据DOM规定,HTML文档中的每个成分都是一个节点。

    ​ JavaScript重构的HTML页面,如果此中包含了恶意的脚本,便会造成DOM-based XSS漏洞。这种类型的漏洞常见的方式如下:

    document.write()
    document.writeIn()
    xxx.innerHTML = 
    xxx.outerHTL = 
    innerHTML.replace
    document.attachEvent()
    window.attachEvent()
    document.location.replace()
    document.location.assign()
    

    防御

    ​ 不管反射型XSS也好,存储型XSS也罢,DOM-based XSS也包括其中,其本质问题就是让对方浏览器执行你插入的JavaScript脚本。所以对于防御措施,主要有以下几种:

    1、永远不要信任前端传过来的参数值,要对其进行过滤过滤再过滤。示例代码如下:

    private String cleanXSS(String value) {
            value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;")
            .replaceAll("\\(", "&#40;").replaceAll("\\)", "&#41;")
            .replaceAll("'", "&#39;")
            .replaceAll("\"", "&#34;")
            .replaceAll("eval\\((.*)\\)", "")
            .replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
            return value;
        }
    

    2、可采用合适的编码函数,如apache.commons.lang3.StringEscapeUtils中的escapeHtml4函数。

    3、采用owasp推出的ESAPI接口,对字符进行转义,如:

    ESAPI.encoder().encodeForHTML(name)
    

    关于ESAPI后续文章将有介绍!

    4、为Cookie加上HttpOnly标记。

    以上便是对XSS漏洞的一些总结!

    相关文章

      网友评论

        本文标题:WEB安全之XSS漏洞

        本文链接:https://www.haomeiwen.com/subject/qdropqtx.html