清理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?
答案 0 :(得分:2)
回调必须是有效的JavaScript标识符,您的服务器端代码应验证这一点。 Javascript标识符只能包含字母,数字,下划线和$符号。
只要回调名称是有效的JS标识符,您就不需要对其进行编码/转义。如果回调不是有效的标识符,您应该只返回400错误代码。
您不能替换回调名称中的字符。这样做没有任何意义,因为客户端代码将不再定义回调函数。