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 回答