验证验证码

时间:2017-08-15 15:56:02

标签: post recaptcha captcha bigcommerce

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。

任何帮助或推动正确的方向将非常感激 - 此时我正在寻找并尝试阅读/遵循相同的文档(谷歌和其他)和论坛案例。谢谢。

2 个答案:

答案 0 :(得分:0)

尝试逐一回答您的问题。

客户端Captcha被讨论here,请检查并注意考虑到Java Script的强大功能,客户端验证码并不安全。

  1. reCAPTCHA如何运作:一旦有人包含以下脚本,Google将验证     用户。

        https://www.google.com/recaptcha/api.js
    

    在表单中写下面的属性会先将数据发送到谷歌     回复将添加到当前表格的最后一篇文章中     名为 g-recaptcha-response 的属性:

        <div class="g-recaptcha" data-sitekey="your_site_key"></div>
    
  2. 如何验证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.';
    
  3. 如果您没有PHP访问权限,
  4. 使用HTML / JS / CSS的访客 reCaptcha将不适合您。

  5. 作为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()。服务器无法知道它。