php - 清理 jsonp 回调的最佳方法?

标签 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?

最佳答案

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

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

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

关于php - 清理 jsonp 回调的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166476/

相关文章:

php - 如何为 PHP 站点实现 HTML 缓存?

javascript - 将日期设置为从今天开始的 7 个工作日(不包括周末和公共(public)假期)

php - 在 Laravel Blade 模板中链接

php - 如何从 Controller 获取两个对象结果以在 Laravel5 中查看

php - 为什么 Bit.ly v4 API 返回 INVALID_CONTENT_TYPE_HEADER?

javascript - 如何在浏览器中打开 Redux Toolkit 的生产模式?

javascript - 如何在包含 iframe、frame、frameset 的页面中通过 id 获取元素?

javascript - 从 Pyramid View 的 subprocess.Popen 动态输出 stdout 到网页

javascript - 如何将模态滑到一边 - 显示其他模态(向导之类的...)

javascript - Angularjs:在 ng-repeat 中加载后运行 jquery