我刚刚开始尝试使用Google的reCAPTCHA工具/服务,并对它的工作方式感到困惑。我已经按照2.0版本的指南进行了操作,这个版本似乎对我有用(在我的本地主机上) - 但我还没有使用密钥。只有在主机/域不是" localhost"?时才需要密钥。
我们的网站依赖于DWR(AJAX)而不是表单提交来与我们的后端进行交互,所以我期望必须以某种方式捕获用户的响应并将其发送到我们的DWR java方法,然后我将POST它是Google的验证服务网址。我似乎不需要那样做。
我已将这些添加到我的主jsp文件中:
<script src='https://www.google.com/recaptcha/api.js?onload=onloadCaptchaCallback&render=explicit' async defer></script>
...
<div id="captchaDiv"></div>
然后我添加的javascript是:
var onloadCaptchaCallback = function() {
grecaptcha.render('captchaDiv', {
'sitekey' : 'MYSITEKEY',
'callback' : verifyCaptchaCallback
});
}
var verifyCaptchaCallback = function(g_recaptcha_response) {
console.log("Response validated. Not a robot.");
// thought I would need to add DWR (AJAX) call here to verify the response
// but this callback is only getting called on a successful response
// anyway - so no need to verify with google's service URL?
}
并且只有在用户满足挑战时才会调用verifyCaptchaCallback函数。我还没有使用过密钥。我错过了什么吗?或者这是版本2预期如何工作 - 无需服务器端处理?我看到当我单击挑战图像对话框上的验证按钮时,POST被发送到谷歌并且显然返回失败/成功标志,导致reCAPTCHA呈现另一个图像质询或停止。我没有手动将结果发送到Google的验证服务网址 - 它似乎是自动发生的。这种行为是否只发生,因为我仍在使用&#34; localhost&#34;在我的开发者系统上进行测试。 - 一旦将webapp移动到我们的客户系统,行为就会失败?
感谢您提供的任何澄清。 格里
答案 0 :(得分:1)
您需要验证用户点击次数。了解reCaptcha works以及如何insert。
无需使用Google的服务网址进行验证?
您仍需要使用g_recaptcha_response
值进行验证。但你需要在服务器端做它!当表单提交到服务器时,你有ex。您服务器上的POST['g_recaptcha_response']
。
var verifyCaptchaCallback = function(g_recaptcha_response) {
console.log("Response validated. Not a robot.");
// you can't now it yet, since 'g_recaptcha_response' is an encoded value, not true or false
}
在服务器上进行最终验证:
header('Content-type: application/json');
$url=https://www.google.com/recaptcha/api/siteverify;
$response=POST['g_recaptcha_response'];
$secret = "<secter_key>"; // you add secret key server side
$params = array('secret'=> $secret, 'response'=> $response);
$json=file_get_contents( $url . '?secret=' . $secret . '&response=' . $response);
echo $json; // here should be 'true' or 'false'
为什么需要进一步验证google的siteverify网址是否必要?
因为在第一次(用户)验证后,只有Google知道用户是否是机器人。它使用绿色勾选(或不更新)更新reCaptcha框架,并在标签中创建隐藏的g-recaptcha-response
textarea标签,其中包含你(服务器端的网站所有者)如果用户是真或假,则不知道。因此,使用此g-recaptcha-response
值无论是来自textarea还是来自回调输入参数,您都可以验证您网站上的当前用户(使用网站的密钥)。只做服务器端,这样你就不会暴露秘密密钥。
如果有必要 - 可以在没有PHP的情况下完成吗?
当然,可以做到。您只需发送到服务器g-recaptcha-response
值,然后使用Java(或其他服务器工具)向您请求Google服务器(如果网站已经过验证)(请阅读here文档)。然后在服务器端,您知道用户是否是人类。使用任何技术将resust返回给客户端。
您也可以从我的auto submit reCaptcha answer中受益。