我无法弄清楚为什么服务器的响应不允许我验证recaptcha。我的PHP代码是:
$captcha = $_POST['g-recaptcha-response'];
$secret = "my key";
$postdata = "secret=".$secret."&response=".$captcha;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
$out = json_decode($server_output);
curl_close($ch);
if($out->success == true){/*make stuff*/} /* when the user clicks, $out->success is not true! */
我的HTML表单很普通。
<form method="POST" id="form">
<!-- inputs -->
<div class="g-recaptcha" data-sitekey="my key" style="margin:10px"></div>
<input type="submit" name="submit" value="Valider">
</form>
我知道这个问题一定很傻。我找到了一种解决方法,而不是检查是否$out->success==true
,检查是否strlen($captcha) > 1
。但我很确定它不太可能阻挡机器人......任何想法?感谢...
编辑:我刚刚在我的网站上运行了ZAP攻击(ZED攻击代理,来自OWASP基金会的安全工具)。它无法完成注册表单(在此之前,它能够在不到一分钟的时间内创建100个用户!)。所以这意味着一些机器人将被阻止。我仍然希望尽快完成它...
答案 0 :(得分:0)
您可以尝试将数据作为数组发送:
$postdata = array(
'secret' => $secret,
'response' => $captcha
);