Q1 - 我一直在阅读reCaptcha的文档,并查看了许多不同的论坛案例,但我对API调用没有任何经验 - 我正在尝试在我的自定义联系表单中添加验证码但我仍然坚持验证步骤试图弄清楚如何/在何处发送信息以进行验证,以及如何/在何处接收它以便我知道天气与否用户已经过验证。
(旁边问题:为什么有必要验证验证码生成的令牌?难道你不能告诉天气这个难题/答案是否解决了?)
在结束头标记之前:
<script src='https://www.google.com/recaptcha/api.js'></script>
表格的结尾:
<div class="g-recaptcha" data-sitekey="my-site-key"></div>
当我打电话时,我可以看到正确答案生成的字符串/令牌:
grecaptcha.getResponse();
现在(据我所知)我必须验证这个字符串/令牌,这是我被卡住的地方:
URL: https://www.google.com/recaptcha/api/siteverify
METHOD: POST
DOCS:https://developers.google.com/recaptcha/docs/verify
我对jQuery和vanilla JS相对不错,但是当谈到API调用时我几乎没有经验,这就是为什么在文档的这一点上我不确定如何1 - 形成一个/ API调用(for验证),2 - 从模板文件中进行API调用的方式,3 - 如何获取响应,或者更确切地说如何返回响应。
正如我所提到的,我使用的是Bigcommerce商店,以及在几个不同领域提到的Google reCaptcha文档,这一步骤是在服务器端完成的(或应该是)。我知道我可以修改的模板文件相当受限 - 我可以查看和修改HTML / CSS / JS文件,但我无法访问任何PHP。
任何帮助或推动正确的方向将非常感激 - 此时我正在寻找并尝试阅读/遵循相同的文档(谷歌和其他)和论坛案例。谢谢。
答案 0 :(得分:0)
尝试逐一回答您的问题。
客户端Captcha被讨论here,请检查并注意考虑到Java Script的强大功能,客户端验证码并不安全。
reCAPTCHA如何运作:一旦有人包含以下脚本,Google将验证 用户。
https://www.google.com/recaptcha/api.js
在表单中写下面的属性会先将数据发送到谷歌 回复将添加到当前表格的最后一篇文章中 名为 g-recaptcha-response 的属性:
<div class="g-recaptcha" data-sitekey="your_site_key"></div>
如何验证reCAPTCHA 必须使用Google验证此g-recaptcha-response。 [注意:这是因为要求 客户端可以为属性 g-recaptcha-response 发送任何随机值 没有经过Captcha]
$verifyResponse =
file_get_contents('https://www.google.com/recaptcha/api/siteverify?
secret='.$YOUR_SECRET.'&response='.$_POST['g-recaptcha-response'])
/*allow_url_fopen must be ON if you want to use file_get_contents.
check it using phpinfo();*/
file_put_contents( "logfile", $verifyResponse, FILE_APPEND );
$responseData = json_decode($verifyResponse);
$register_result = 'Robot verification failed, please try again.';
if( $responseData->success )
{
$register_result = 'You are not a bot';
}
else $register_result = 'You are a bot.';
使用HTML / JS / CSS的访客 reCaptcha将不适合您。
作为Captcha的拼图 Captcha Puzzles也是可能的,这样的验证码也可以使用,但它们在服务器端处理。
答案 1 :(得分:-1)
reCaptcha验证确保您收到的答案确实来自reCaptha服务器,用户不是机器人,它还没有成熟,并且它没有被使用过一旦。
所有这些对于运行应用程序的服务器来说非常重要,更多的是显示表单的客户接受或拒绝要处理的表单。
这就是必须在服务器上进行验证的原因。客户端是一个不安全的环境,可以欺骗,因此服务器不能信任它。
此外,要进行验证,您需要一个秘密的api密钥。由于它是秘密,因此无法嵌入到客户端代码中。
如果您无法访问php或无法添加和附加php进行验证,我认为您无法实施reCaptcha。
编辑我
最重要的是,从服务器的角度来看,无法信任客户端代码(在浏览器中运行的js,jQuery)进行任何类型的验证。
例如,假设您为用户实现了一个输入元素,用于输入0到9之间两个随机整数之和的结果。非常简单。
在某些地方的javascript代码中有一个:
if(a + b === c){
sendFormToServer();
}else{
reject();
}
任何使用浏览器开发者工具的人都可以绕过&#34; if&#34;并直接调用sendFormToServer()。服务器无法知道它。