google recaptcha:我们应该过滤 file_get_contents $_POST 变量吗?

google recaptcha: should we filter for file_get_contents $_POST variables?

嗨,我有一个关于 google 的问题 php

我注意到验证 recaptcha 的标准行是:

$response =file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=". $yoursecret."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR']);

我的问题是我们是否应该 verify/filter/sanitize $_POST['g-recaptcha-response'] 和 $_SERVER['REMOTE_ADDR']?

我认为我们需要 filter/verify 处理所有事情,但我无法从 google 中找到任何相关文档。我担心有人会在 POST 中添加其他内容并将响应重定向到另一个站点,然后在没有 verification/sanitizing $_POST 变量

的情况下做一些恶意的事情

如果只是为了可靠性,您应该在将任何内容插入查询字符串之前将其包裹 urlencode。或者,停止通过将字符串组合在一起来构建 URL,并将其留给内置函数 http_build_query:

$url = 'https://www.google.com/recaptcha/api/siteverify?' . http_build_query([
    'secret' => $yoursecret,
    'response' => $_POST['g-recaptcha-response'],
    'remoteip' => $_SERVER['REMOTE_ADDR'],
]);

$response = file_get_contents($url);

无论是否存在明显的安全漏洞,始终 运行 通过任何相关编码进行处理。如果 $_POST['g-recaptcha-response'] 包含将来需要不同编码的字符(例如 &),那么您将在问题发生之前避免它们。