1

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);

}

なんで?:

JSONP呼び出しからのコールバックパラメーターをサニタイズする必要がありますか?

4

1 に答える 1

2

コールバックは有効なJavaScript識別子である必要があり、サーバー側のコードでこれを確認する必要があります。Javascript識別子には、アルファベット、数字、アンダースコア、および$記号のみを含めることができます。

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

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

于 2012-04-16T04:47:11.347 に答える