无法以PHP格式验证reCAPTCHA

时间:2017-03-01 10:14:38

标签: php json recaptcha

我无法弄清楚为什么服务器的响应不允许我验证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个用户!)。所以这意味着一些机器人将被阻止。我仍然希望尽快完成它...

1 个答案:

答案 0 :(得分:0)

您可以尝试将数据作为数组发送:

$postdata = array(
    'secret' => $secret,
    'response' => $captcha
);