gpt4 book ai didi

jsonp - 我是否需要清理 JSONP 调用中的回调参数?

转载 作者:行者123 更新时间:2023-12-03 13:27:41 26 4
gpt4 key购买 nike

我想通过 JSONP 提供 Web 服务,并且想知道是否需要清理回调参数中的值。

我当前的服务器端脚本目前看起来像这样(或多或少。代码在 PHP 中,但实际上可以是任何东西。):

header("Content-type: application/json; charset=utf-8");
echo $_GET['callback'] . '(' . json_encode($data) . ')';

这是一个经典的 XSS 漏洞。

如果我需要对其进行 sanitizer ,那该怎么做?我无法找到有关可能允许的回调字符串的足够信息。我引用 Wikipedia :

While the padding (prefix) is typically the name of a callback function that is defined within the execution context of the browser, it may also be a variable assignment, an if statement, or any other Javascript statement prefix.

最佳答案

您要确保回调是有效的标识符,可以是字母数字、下划线或 $。它也不能是保留字(为了彻底,我会确保它不是 undefinedNaNInfinity )。这是我使用的测试:

function valid_js_identifier( $callback ){
return !preg_match( '/[^0-9a-zA-Z\$_]|^(abstract|boolean|break|byte|case|catch|char|class|const|continue|debugger|default|delete|do|double|else|enum|export|extends|false|final|finally|float|for|function|goto|if|implements|import|in|instanceof|int|interface|long|native|new|null|package|private|protected|public|return|short|static|super|switch|synchronized|this|throw|throws|transient|true|try|typeof|var|volatile|void|while|with|NaN|Infinity|undefined)$/', $callback);
}

许多保留字毫无意义,但其中一些可能会导致错误或无限循环。

重要提示:不要只是通过替换字符来清理输入;修改后的回调可以正常运行,并且返回的数据将无法正确处理(甚至可能被错误的函数处理)。您想测试输入是否有效,如果不是则抛出错误。这将避免意外行为并通知开发人员需要不同的回调。

注意:这是一个更安全但有限的 JSONP 版本,它不允许表达式或细化。我发现它适用于大多数应用程序,特别是如果您使用 jQuery 和 $.getJSON

关于jsonp - 我是否需要清理 JSONP 调用中的回调参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2777021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com