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

时间:2018-04-17 20:11:08

标签: php recaptcha

嗨,我有一个关于谷歌google recaptcha的问题

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

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

我的问题是我们应该验证/过滤/清理$ _POST ['g-recaptcha-response']和$ _SERVER ['REMOTE_ADDR']吗?

我认为我们需要过滤/验证所有内容,但我找不到任何来自Google的文档。我担心有人会在POST中添加其他内容并将响应重定向到另一个站点,然后在没有验证/清理$ _POST变量的情况下做一些恶意的事情

1 个答案:

答案 0 :(得分:1)

在将urlencode插入查询字符串之前,应该将$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); 包裹起来,如果只是为了可靠性。或者,停止通过将字符串组合在一起来构建网址,并将其留给内置函数http_build_query

$_POST['g-recaptcha-response']

是否存在明显的安全漏洞,总是通过任何相关编码运行。如果&包含将来需要不同编码的字符(例如MessagesStore.shared.messages = newMessages ),那么您将在问题发生之前避免出现问题。