这个复选框如何重新运行,我该如何使用它?

Ped*_*sta 149 security recaptcha

我最近注册了oneplusone网站https://account.oneplus.net/sign-up,并注意到这个复选框重新开始

复选框recaptcha

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

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

Pre*_*red 114

此条目不回答原始问题,但它有助于实现类似的解决方案. 正如@IanM所说,复选框recaptcha处于测试阶段,如果没有邀请就无法使用.

重要编辑谷歌推出了新的reCAPTCHA

这是一个基于JavaScript的CAPTCHA.

由于大多数垃圾邮件机器人不执行JavaScript并且不能确定所显示的文本和DOM或需要采取的行动之间的关系,他们不能点击复选框.

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

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

要点中的步骤:

  • 生成唯一标识符并使​​用隐藏输入将其添加到表单中
  • 在网站上呈现一个复选框(不使用该<input>元素,可能使用<div>)并将之前生成的标识符添加到其中(您可以使用html5 data-*属性)
  • 当用户点击该复选框,发送一个Ajax请求到服务器,验证验证码,如果它是有效的将其标记为in use.(显示结果 - 标识符正常/不正常 - 给用户)
  • 当用户发送表单时,表单的数据包含标识符.再次检查,它应该存在,它应该处于in use状态.
  • 如果所有验证都通过,表单的数据就可以使用/处理了

您可以将标识符绑定到用户的会话,IP地址,和/或您可以使用时间限制来提高安全性.

注意这种CAPTCHA仅在启用JavaScript时有效!

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

注意(编辑2)请注意,专门为一个站点编写的脚本或打破一种类型的验证码的脚本迟早会通过.没有终极保护,你只能让机器人(或他们的开发人员)更加努力.

注意(编辑3)本答案中的步骤和说明仅包含有关此类验证码的一些基本信息,您必须始终添加其他验证和安全步骤,以使其更安全.例如,Google noCaptcha在3次"div点击"后系统地触发标准reCaptcha.

  • 我认为问题是关于"如何使用Google的reCAPTCHA启用此功能?" 我很自信我可以自己实现这一点,但对于他们的情况来说并不是那么简单. (4认同)

Ian*_*n M 30

这是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年到来......

  • @NikhilGirraj,如果你想知道**如何*没有CAPTCHA reCAPTCHA*工作**,我指向[这篇文章](http://scraping.pro/no-captcha-recaptcha-challenge/). (5认同)
  • 这可以解释一下,新的"No CAPTCHA reCAPTCHA"如何运作? (4认同)
  • 摘自电子邮件:"我们希望在2015年将所有现有的reCAPTCHA网站迁移到新的API." (3认同)

ism*_*tro 9

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

客户端:

<div class="g-recaptcha" data-sitekey="PUBLIC_KEY"></div>
Run Code Online (Sandbox Code Playgroud)

服务器端:

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();
Run Code Online (Sandbox Code Playgroud)

:)


jp2*_*ode 5

我在搜索中来到这里,没有看到答案,所以我一直在寻找.

在我搜索之后,这个窗口仍然打开,所以我用我的发现更新这篇文章.

您可以在这里了解reCAPTCHA:

http://scraping.pro/no-captcha-recaptcha-challenge/

但是,基本上,您将其添加到您的网页:

<script src="https://www.google.com/recaptcha/api.js" >;
<form method="post">
    <div class="g-recaptcha" data-sitekey="[site key issued by google]"></div>
    <input value="submit" type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

要获取reCAPTCHA密钥,请访问以下Google网站:

https://www.google.com/recaptcha/intro/index.html

使用上面的链接获得密钥后,您可以使用以下Google信息更深入地编写密码:

https://developers.google.com/recaptcha/

注意:

来自Google文档:

该脚本必须使用HTTPS协议加载,并且可以无限制地从页面上的任何位置包含.

以下是我如何使用它的示例:

<html>
<head>
    <title>Contact</title>
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    <script>
    var onloadCallback = function () {
        grecaptcha.render('dvCaptcha', {
            'sitekey': '<%=ReCaptcha_Key %>',
            'callback': function (response) {
                $.ajax({
                    type: "POST",
                    url: "CS.aspx/VerifyCaptcha",
                    data: "{response: '" + response + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (r) {
                        var captchaResponse = jQuery.parseJSON(r.d);
                        if (captchaResponse.success) {
                            $("[id*=txtCaptcha]").val(captchaResponse.success);
                            $("[id*=lblAlarm]").hide();
                        } else {
                            $("[id*=txtCaptcha]").val("");
                            $("[id*=lblAlarm]").show();
                            var error = captchaResponse["error-codes"][0];
                            $("[id*=lblAlarm]").html("RECaptcha error. " + error);
                        }
                    }
                });
            }
        });
    };
    </script>
</head>
<body>
    <form action="?" method="POST">
        <div id="dvCaptcha" class="g-recaptcha" data-sitekey="[site key issued by google]"></div>
        <br />
        <asp:Button ID="btnSubmit" runat="Server" Text="Send" OnClick="btnSubmit_Click" />
        <asp:Label ID="lblAlarm" runat="server" ForeColor="Red"></asp:Label>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

如果需要在ASP.NET代码隐藏中进行验证,只需验证"g-recaptcha-response"控件是否已填写:

protected static string ReCaptcha_Key, ReCaptcha_Secret;

protected void btnSubmit_Click(object sender, EventArgs e)
{
    if (!String.IsNullOrEmpty(Request.Form["g-recaptcha-response"]))
    {
        // other code
    } else
    {
       lblAlarm.Text = "reCAPTCHA failed.";
    }
}
Run Code Online (Sandbox Code Playgroud)

希望你们中的一些人觉得这很有用.