清理 jsonp 回调的最佳方法

Best way to sanitize callback for jsonp?

本文关键字:最佳 方法 回调 jsonp 清理      更新时间:2023-09-26

清理 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 调用中的回调参数?

回调必须是有效的 javascript 标识符,并且您的服务器端代码应对此进行验证。Javascript 标识符只能包含字母、数字、下划线和 $ 符号。

只要回调名称是有效的 JS 标识符,就不需要对其进行编码/转义。如果回调不是有效的标识符,则只需返回 400 错误代码。

不得替换回调名称中的字符。这样做没有任何意义,因为客户端代码将不再定义回调函数。