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

时间:2014-08-28 09:37:47

标签: security recaptcha

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

checkbox recaptcha

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

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

5 个答案:

答案 0 :(得分:114)

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

重要编辑 Google推出了新的reCAPTCHA

这是一个基于JavaScript的CAPTCHA。

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

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

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

要点中的步骤:

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

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

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

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

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

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

答案 1 :(得分:30)

这是reCAPTCHA的测试版API。我从他们的JS API源代码中收集了这些内容:https://www.google.com/recaptcha/api.js引用&#34; API2&#34;。而且我也发现了这一点:http://jaswsinc.com/recaptcha-ads/显然他们只做了他们的#34;没有CAPTCHA reCAPTCHA&#34;所以......你可能无法让它在你的网站上运行。我无法找到有关选择加入测试版的任何信息,但如果您搜索&#34;没有CAPTCHA reCAPTCHA beta&#34;您可以看到许多人提到收到Google发送的电子邮件,以便他们加入。

如果您找到进入测试阶段的地方,请分享!否则看起来公开发布将在2015年出现......

答案 2 :(得分:9)

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

客户端:

three

服务器端:

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

:)

答案 3 :(得分: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>

要获取 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>

如果您需要在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.";
    }
}

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

答案 4 :(得分:3)

感谢大家对这个主题的贡献,很高兴见到这么多人对新的recaptcha工具感兴趣。

我无法找到它的.net实现,因此构建了一个简单的Web表单控件,您可以在此处找到https://github.com/pnmcosta/recaptchav2dotnet