这个复选框重演如何工作,我如何使用它?

我最近注册了一个叫做 https://account.oneplus.net/sign-up的网站,注意到了这个复选框

checkbox recaptcha

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

重演技巧站点没有提到任何新的重演技巧方法... ... https://www.google.com/recaptcha/intro/index.html

81178 次浏览

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

谷歌推出了新的 reCAPTCHA

这是一个基于 JavaScript 的 CAPTCHA。

由于大多数垃圾邮件程序不执行 JavaScript,并且不能识别显示的文本与 DOM 之间的相关性,或者不能单击复选框。

请注意,这里根本没有复选框,它只是一个带有一些 CSS 样式的 div 元素。垃圾邮件机器人试图填写表单输入元素,但在 CAPTCHA 中没有输入。复选标记只是另一个 div (css 类)。

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

要点中的步骤:

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

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

注意 这种 CAPTCHA 只有在启用 JavaScript 时才能工作!

注意 (编辑1)正如@crazy芋所说,有一些自动化工具可以执行 JavaScript,这些工具也可以发送适当的 AJAX 请求并在复选框 div 上激活 Click 事件。

注意 (编辑2)请注意,针对特定站点或中断某种验证码的脚本迟早会通过。没有最终的保护,你只能让机器人(或者他们的开发者)更加努力地工作。

注意 (编辑3)这个答案中的步骤和描述只包含一些关于这种验证码的基本信息,你总是需要添加额外的验证和安全步骤来使它更加安全。例如,GooglenoCaptcha 在3次“ div 点击”后系统地激活一个标准的 reCaptcha。

这是一个用于 reCAPTCHA 的 beta API。我从他们引用“ API2”的 JS API: https://www.google.com/recaptcha/api.js的源代码中收集了这些信息。我还发现了这个: http://jaswsinc.com/recaptcha-ads/ (存档)显然他们做了一个“无验证码重验证”的邀请测试版,所以..。你可能还不能让它在你的网站上工作。我找不到任何关于选择加入测试版的信息,但是如果你搜索“ No CAPTCHA reCAPTCHA beta”,你可以看到很多人提到他们可以从谷歌获得电子邮件加入。

如果你找到一个地方进入测试版,请分享!否则看起来像是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();

:)

感谢大家对这个线程的贡献,很高兴看到这么多人对这个新的重演工具感兴趣。

我找不到。因此建立了一个简单的网页表单控件,你可以在这里找到 https://github.com/pnmcosta/recaptchav2dotnet

我来到这里寻找,没有看到一个答案,所以我继续寻找。

经过我的搜索,这个窗口仍然打开,所以我更新这篇文章与我的发现。

以下是你可以了解 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密钥,请访问以下谷歌网站:

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

一旦你使用上面的链接得到了你的密钥,你就可以使用下面的 Google 信息更深入地了解它的编码过程:

Https://developers.google.com/recaptcha/

注意:

来自谷歌的文档:

该脚本必须使用 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-captcha-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.";
}
}

希望你们中有人会觉得这个有用。