首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证Captcha

验证Captcha
EN

Stack Overflow用户
提问于 2017-08-15 15:56:02
回答 2查看 2.4K关注 0票数 0

Q1 --我一直在阅读reCaptcha的文档,并查看了许多不同的论坛案例,但我完全没有使用API调用的经验--我试图在我的自定义联系人表单中添加一个captcha,但是我在验证步骤中一直在努力弄清楚如何/在哪里发送信息以进行验证,以及如何/在哪里接收它,以便我知道用户是否经过验证。

(附带问题:为什么有必要验证captcha生成的令牌?你能分辨天气吗?谜题/答案还没有解决吗?)

在结束头标签之前:

代码语言:javascript
复制
<script src='https://www.google.com/recaptcha/api.js'></script>

我表格的结尾:

代码语言:javascript
复制
<div class="g-recaptcha" data-sitekey="my-site-key"></div>

当我调用时,我可以看到由正确答案生成的字符串/令牌:

代码语言:javascript
复制
grecaptcha.getResponse();

现在(据我理解),我必须验证这个字符串/令牌,这是我陷入困境的地方:

代码语言:javascript
复制
URL: https://www.google.com/recaptcha/api/siteverify
METHOD: POST

博士:https://developers.google.com/recaptcha/docs/verify

我在jQuery和vanilla方面相对不错,但是当涉及到API调用时,我几乎没有经验,这就是为什么在文档中,我不知道如何1--形成一个/ API调用(用于验证),2-从模板文件中调用API的位置--明智地,3--如何获得响应,或者更确切地说,如何返回响应。

正如我所提到的,我使用的是Bigcommerce商店,在服务器端(或者应该在服务器端完成)中提到的几个不同领域中提到的Google reCaptcha文档。我知道我在我可以修改的模板文件中受到了很大的限制--我可以查看和修改HTML/CSS/JS文件,但是我不能访问任何PHP。

任何帮助或推动正确的方向将是非常感谢的-在这一点上,我正在寻找和尝试阅读/跟随相同的文档(谷歌和其他)和论坛案例。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-08-16 12:25:39

一个接一个地回答你的问题。

客户端Captcha是讨论这里的,请检查并注意考虑到Java的功能,客户端captchas是不安全的。

  1. How reCAPTCHA works:一旦有人在脚本中包含,谷歌将验证用户。 https://www.google.com/recaptcha/api.js 在表单中写入下面的属性将首先将数据发送到google,响应将添加到当前表单的最后一篇文章中,该属性名为g-recaptcha-response :<div class="g-recaptcha" data-sitekey="your\_site\_key"></div> 。
  2. 如何验证reCAPTCHA One必须用谷歌验证这个g-recaptcha-响应。注意:这是正则化的,因为客户端可以为属性g-recaptcha-响应发送任意随机值,而无需通过Captcha。 如果要使用secret='.$YOUR_SECRET.'&response='.$_POST'g-recaptcha-response'),则$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify? /*allow_url_fopen必须打开)。使用phpinfo( );*/ file_put_contents( "logfile",$verifyResponse,FILE_APPEND );$responseData = json_decode($verifyResponse);$register_result =‘机器人验证失败,请再试一次。’;如果( $responseData->success ){ $register_result =‘您不是机器人’;}$responseData $register_result =‘您是一个机器人’;
  3. 如果您没有访问权限,具有HTML/CSS reCaptcha的HTML将不适用于您。
  4. Puzzles作为Captcha Captcha Puzzles也是可能的,这类captcha也是可用的,但它们是在服务器端处理的。
票数 1
EN

Stack Overflow用户

发布于 2017-08-15 16:13:35

reCaptcha验证si以确保您收到的答案确实来自reCaptha服务器,用户不是机器人,它还没有成熟,并且它没有被使用过不止一次。

所有这些对于运行应用程序的服务器来说都是非常重要的,更重要的是客户端显示表单以便接受或拒绝要处理的表单。

这就是为什么必须在服务器上进行验证的原因。客户端是一个可能被欺骗的不安全环境,因此服务器无法信任它。

此外,要进行验证,您需要一个秘密api密钥。因为它是秘密的,所以不能嵌入到客户端代码中。

如果您没有对php的访问权限,或者无法添加和访问php来进行验证,我认为您无法实现reCaptcha。

编辑I

底线是不能信任客户端代码(js,在浏览器中运行的jQuery )从服务器的角度进行任何类型的验证。

例如,假设您实现了一个输入元素,让用户输入0到9之间两个随机整数之和的结果。非常简单。

在某些地方的javascript代码中有一个:

代码语言:javascript
复制
if(a + b === c){ 
    sendFormToServer();
}else{
    reject();
}

任何使用浏览器开发工具的人都可以绕过"if“,直接调用sendFormToServer()。服务器无法知道这一点。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45696662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档