jsonp跨域時如何解決xss漏洞

解決安全性問題,主要涉及兩點:javascript

(1) 先後端約定jsonp請求的js的回調函數名前端

(2) 服務器端指定返回的數據格式爲jsonjava

(3) 進行referrer驗證 ($_SERVER['HTTP_REFERER'] 中的 host,是否在白名單內)ajax

 

如下是事例代碼:json

1. 前端js發起ajax跨域jsonp請求:後端

$.ajax({
    type: "GET",
    url: "http://xxx.com/getData",
    dataType: "jsonp", 
    jsonp: "callbackParam", //自定義callback參數名稱,可將默認的參數名稱callback自定義成myCallback等其餘名稱
    jsonpCallback:"getData", //自定義callback的js函數名
    success: function(data) {
        ...
    }
});

2. 服務器端返回數據:跨域

public function getData(){
    //指定返回的數據格式,以便於可執行js函數
    header("Content-type: application/javascript");

    $callback = $this->_param('callbackParam');

    //約定只接受某個js回調函數名
    if($callback != 'getData') {
        $callback = 'getData';
    }

    $data = array(...);

    echo $callback.'('.json_encode($data).')';
    exit;
}
相關文章
相關標籤/搜索