嗨,我有一个关于谷歌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变量的情况下做一些恶意的事情
答案 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
),那么您将在问题发生之前避免出现问题。