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

Security 这个复选框是如何工作的,我如何使用它?,security,recaptcha,Security,Recaptcha,我最近注册了oneplusone网站,注意到这个复选框recaptcha 它是如何工作的,我如何在我的网站上使用它?比那些晦涩难懂的单词/数字好多了:) recaptcha站点没有提到任何新的recaptcha方法 这个条目没有回答最初的问题,但是它有助于实现类似的解决方案。正如@IanM所说,复选框recaptcha处于测试阶段,未经邀请无法使用 重要编辑谷歌推出了新的reCAPTCHA 这是一个基于JavaScript的验证码 由于大多数spambot不执行JavaScript,并

我最近注册了oneplusone网站,注意到这个复选框recaptcha

它是如何工作的,我如何在我的网站上使用它?比那些晦涩难懂的单词/数字好多了:)


recaptcha站点没有提到任何新的recaptcha方法

这个条目没有回答最初的问题,但是它有助于实现类似的解决方案。正如@IanM所说,复选框recaptcha处于测试阶段,未经邀请无法使用

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

这是一个基于JavaScript的验证码

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

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

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

要点中的步骤:

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

注意这种验证码仅在启用JavaScript时有效

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

注意(编辑2)请注意,专门为一个站点编写的脚本或用于中断一种验证码的脚本迟早会通过。没有终极保护,你只能让机器人(或他们的开发者)更加努力地工作


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

这是reCaptcha的测试版API。我是从他们的JSAPI源代码中收集到的:引用“API2”。我也发现了这一点:显然,他们做了一个只邀请测试版的“无验证码重述”,所以。。。。你可能还不能在你的网站上使用它。我找不到任何关于选择进入测试版的信息,但是如果你搜索“无验证码重述测试版”,你会看到很多人提到从谷歌收到电子邮件让他们加入


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

以下是我在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();

:)

感谢大家对本帖的贡献,很高兴看到这么多人对新的recaptcha工具感兴趣


我找不到它的.net实现,所以我构建了一个简单的web表单控件,您可以在这里找到

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

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

在这里,您可以了解有关reCAPTCHA的信息:

但基本上,您可以将以下内容添加到您的网页:

<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>

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

我在完全相同的地方看到它,并想知道完全相同的事情。我悬赏以引起注意。我也很好奇。也许它正在测试中,还没有准备好发布?一个简单的方法是
$('form input[type=submit]')。在('you a human?')之前机器人不会选中该框,因为它不是表单的一部分。还有一种蜜罐方法,将不可抗拒的输入字段放入表单中(如“注释”),然后用css/js隐藏它。如果数据存在,则发送方是机器人。我用过这个,效果出奇地好。仅供参考:我想问题是关于“我如何使用谷歌的reCAPTCHA启用此功能?”我很有信心我自己可以实现这个功能,但他们的案例并不是那么简单。如果你点击街景页面底部的报告问题,你会得到同样的新reCAPTCHA。这是我在搜索时第一次看到它并找到这个SO页面的地方。什么可以阻止机器人发送那个ajax请求?如果每个人(或一个半大型站点)都要实现这样的验证码,它肯定会被利用。Cloudflare有一个类似的机器人检测系统,它似乎可以在不需要用户做任何事情的情况下工作
<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>
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.";
    }
}