2012-04-15 4 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

+0

私はなぜあなたが何をしようとしているのか分かりません。クライアントがXSSを実行しないようにしようとしていますか? –

+1

こんにちはカルロス、あなたはあなたの質問が閉じられる前に、あなたがやろうとしていることをより明確にすることができますか?それが私があなたに尋ねていると思うものなら、私は答えを見るのが好きです。がんばろう! – jmort253

答えて

2

コールバックが有効なJavaScript識別子である必要があり、サーバー側のコードは、このことを確認する必要があります。 JavaScriptの識別子に使用できるのは、英字、数字、アンダースコア、$記号のみです。

コールバック名が有効なJS識別子である限り、エンコード/エスケープする必要はありません。また、コールバックが有効な識別子でない場合は、単に400エラーコードを返す必要があります。

コールバック名の文字を置き換えないでください。クライアントコードには定義されていないコールバック関数が存在しなくなるため、そうすることには何の意味もありません。