2012-04-15 39 views
1

消除jsonp回調的最佳方式是什麼?消除jsonp回調的最佳方法?

目前,我有這樣的:

function api_output($data) { 

    if (isset($_GET['callback'])) { 

     $cb = preg_replace("/[^][.\\'\\\"_A-Za-z0-9]/", '', $_GET['callback']); 
     send_js_headers(); 
     print sprintf('%s(%s);', $cb, json_encode($data)); 
     exit(0); 

    } 

     send_json_headers(); 
     echo json_encode($data); 
     exit(0); 

} 

爲什麼? :

Do I need to sanitize the callback parameter from a JSONP call?

+0

你爲什麼要嘗試清理回調參數?如果有人使用jsonp錯誤,那是他自己的錯。 – Bergi 2012-04-15 21:59:15

+0

我不確定你爲什麼要嘗試。你試圖阻止客戶從XSS自己? – 2012-04-15 21:59:33

+1

嗨,卡洛斯,你可以更清楚你想要做什麼,並且很快,在你的問題關閉之前!?如果這是我想你問的,我很好奇看到答案。祝你好運! – jmort253 2012-04-15 22:00:12

回答

2

回調必須是有效的JavaScript標識,您的服務器端代碼應該驗證這一點。 JavaScript標識符只能包含字母,數字,下劃線和$符號。

只要回調名稱是一個有效的JS標識符,您不需要編碼/轉義它。如果回調不是一個有效的標識符,你應該簡單地返回一個400錯誤代碼。

您不能替換回調名稱中的字符。這樣做沒有任何意義,因爲客戶端代碼將不再具有定義的回調函數。