清理jsonp回调的最佳方法是什么?

时间:2012-04-15 21:53:34

标签: php javascript jquery callback xss

清理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?

1 个答案:

答案 0 :(得分:2)

回调必须是有效的JavaScript标识符,您的服务器端代码应验证这一点。 Javascript标识符只能包含字母,数字,下划线和$符号。

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

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