这个复选框是如何工作的?我如何使用它?

我最近注册了oneplusone网站https://account.oneplus.net/sign-up,并注意到此复选框recaptcha

复选框recaptcha

它是如何工作的,以及如何在我的网站上使用它? 比那些神秘的文字/数字好得多:)

recaptcha网站没有提及任何新的recaptcha方法... https://www.google.com/recaptcha/intro/index.html


这是reCAPTCHA的beta API。 我从他们的JS API的源头收集它:https://www.google.com/recaptcha/api.js引用“API2”。 我也发现了这个:http://jaswsinc.com/recaptcha-ads/显然他们做了一个“无CAPTCHA reCAPTCHA”的受邀测试版,所以......你可能无法使它工作您的网站,但。 我找不到任何关于选择测试版的信息,但是如果您搜索“No CAPTCHA reCAPTCHA beta”,您可以看到许多人提到从Google获取电子邮件以供他们加入。

如果你找到一个地方进入测试版,请分享! 否则,它看起来像在2015年公开发布...


本条目不回答原始问题,但它有助于实施类似的解决方案。 正如@IanM所说,复选框recaptcha处于测试阶段,无法在没有邀请的情况下使用。

重要编辑 Google推出了新的reCAPTCHA

  • 谷歌在线安全博客:你是机器人吗? 推出“无CAPTCHA reCAPTCHA”
  • Google reCAPTCHA:介绍新的reCAPTCHA!
  • 这是一个基于JavaScript的CAPTCHA。

    由于大多数垃圾邮件不执行JavaScript,并且无法识别显示的文本与DOM之间的相关性或所需的操作,因此无法单击该复选框。

    请注意,根本没有复选框,它只是一个带有CSS样式的div元素。 Spambots正在尝试填写表单输入元素,但CAPTCHA中没有任何输入。 复选标记只是另一个div(css类)。

    当您单击该框时,ajax请求会通知服务器单击了div,并且服务器将此信息存储在临时存储中(标记该令牌:此令牌由人员激活)。 提交表单时,隐藏字段会发送已激活的令牌,然后当服务器验证表单信息时,它会识别该令牌已激活。 如果令牌未被激活,表单将失效。

    要点中的步骤:

  • 生成一个唯一的标识符并将其添加到带有隐藏输入的表单中
  • 在网站上呈现一个复选框(不使用<input>元素,可能使用<div> )并将之前生成的标识符添加到它(可以使用html5 data-*属性)
  • 当用户点击复选框时,向服务器发送ajax请求并验证CAPTCHA,如果有效,则将其标记为in use 。 (显示结果 - 标识符正确/不正确 - 给用户)
  • 当用户发送表单时,表单的数据包含标识符。 再次检查,它应该存在,它应该in use状态。
  • 如果所有的验证都通过了,表单的数据就可以使用/处理了
  • 您可以将标识符绑定到用户的会话,IP地址,和/或您可以使用时间限制来提高安全性。

    注意这种验证码只适用于启用JavaScript的情况!

    注意 (编辑1)正如@crazypotato所述,有一些自动化工具可以执行JavaScript,这些工具也能够发送正确的AJAX请求,并在复选框div上触发Click事件。

    注意 (编辑2)请注意,写入一个网站或打破一种类型的验证码的脚本迟早会获得。 没有最终的保护,你只能让机器人(或他们的开发人员)更努力地工作。

    注意 (编辑3)本答案中的步骤和描述仅包含有关此类验证码的一些基本信息,您必须添加额外的验证和安全措施以使其更加安全。 例如,Google noCaptcha在3“div点击”后系统地启动标准reCaptcha。


    这里是我的代码在PHP中运行时没有问题:

    客户端:

    <div class="g-recaptcha" data-sitekey="PUBLIC_KEY"></div>
    

    服务器端:

    if (isset($_POST['g-recaptcha-response'])) {
        $captcha = $_POST['g-recaptcha-response'];
        $privatekey = "SECRET_KEY";
        $url = 'https://www.google.com/recaptcha/api/siteverify';
        $data = array(
            'secret' => $privatekey,
            'response' => $captcha,
            'remoteip' => $_SERVER['REMOTE_ADDR']
        );
    
        $curlConfig = array(
            CURLOPT_URL => $url,
            CURLOPT_POST => true,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POSTFIELDS => $data
        );
    
        $ch = curl_init();
        curl_setopt_array($ch, $curlConfig);
        $response = curl_exec($ch);
        curl_close($ch);
    }
    
    $jsonResponse = json_decode($response);
    
    if ($jsonResponse->success == "true")
        doSomething();
    else
        doSomeOtherThing();
    

    :)

    链接地址: http://www.djcxy.com/p/21631.html

    上一篇: How does this checkbox recaptcha work and how can I use it?

    下一篇: How to pass a hidden recaptcha with mechanize?