我最近注册了oneplusone网站 https://account.oneplus.net/sign-up,并注意到这个复选框的recaptcha
它是如何工作的,我如何在我的网站上使用它? 比那些难以辨认的单词/数字好得多:)
recaptcha网站没有提到任何新的recaptcha方法... https://www.google.com/recaptcha/intro/index.html
我最近注册了oneplusone网站 https://account.oneplus.net/sign-up,并注意到这个复选框的recaptcha
它是如何工作的,我如何在我的网站上使用它? 比那些难以辨认的单词/数字好得多:)
recaptcha网站没有提到任何新的recaptcha方法... https://www.google.com/recaptcha/intro/index.html
此条目并未回答原始问题,但有助于实施类似的解决方案。 正如@IanM所说,复选框验证码处于测试阶段,没有邀请就不能使用。
重要更新 Google推出了新的reCAPTCHA
这是基于JavaScript的CAPTCHA。
由于大多数垃圾邮件机器人不执行JavaScript,并且无法识别显示的文本和DOM或所需操作之间的相关性,因此它们无法单击复选框。
请注意,根本没有复选框,它只是一个带有一些CSS样式的div元素。垃圾邮件机器人正在尝试填充表单输入元素,但CAPTCHA中没有输入。勾号只是另一个div(css类)。
当您点击该框时,ajax请求通知服务器已单击div,并且服务器将此信息存储在临时存储中(标记令牌:此令牌已被人类激活)。提交表单时,隐藏字段发送被激活的令牌,然后当服务器验证表单信息时,它将识别到令牌已被激活。如果未激活令牌,则表单将无效。
以下是步骤:
使用中
。(向用户显示结果-标识符是否OK /不OK)使用中
状态。您可以将标识符绑定到用户的会话、IP地址和/或使用时间限制来提高安全性。
注意:仅当启用JavaScript时,此类CAPTCHA才有效!
注意:(编辑1)正如@crazypotato所述,有一些自动化工具可以执行JavaScript,这些工具也能够发送正确的AJAX请求并在复选框div上触发单击事件。
注意:(编辑2)请注意,针对特定网站编写的脚本或破解某种类型的验证码,迟早会成功。没有绝对的保护,您只能使机器人(或其开发人员)更加努力地工作。
注意:(编辑3)本答案中的步骤和描述仅包含有关此类验证码的一些基本信息,您始终需要添加其他验证和安全步骤以使其更加安全。例如,谷歌的noCaptcha在3次“div点击”后系统地触发标准reCaptcha。
这是reCAPTCHA的beta API。我从他们JS API的源代码中发现了这一点:https://www.google.com/recaptcha/api.js 引用了“API2”。而且我还找到了这个链接:http://jaswsinc.com/recaptcha-ads/(已存档) 显然,他们进行了一个邀请制的beta测试,“无验证码的reCAPTCHA”,所以......你可能还不能在自己的网站上使用它。我没有找到任何有关加入beta测试的信息,但如果你搜索“无验证码reCAPTCHA beta测试”,你会看到很多人提到他们收到谷歌的电子邮件邀请他们加入。
如果你找到了加入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();
:)
g-recaptcha-response
的POST,但在你的客户端代码中没有定义这样的元素...我有什么遗漏吗? - benomatisg-recaptcha-response
是reCAPTCHA返回的响应 - 如果它被填充,那么验证码已成功通过(由用户)。 - Hashim Aziz我在搜寻中来到这里,没有找到答案,所以继续寻找。
在我的搜索之后,这个窗口仍然打开着,所以我用我的发现更新了这篇文章。
下面是关于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>
<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.";
}
}
希望这对你们中的一些人有用。
$('form input[type=submit]').before('<div>你是人类吗?<input type="checkbox" name="captcha" /></div>');
机器人不会勾选复选框,因为它不是表单的一部分。http://jsfiddle.net/s6jkchmz/ - TylerHERROR: Site key is not enabled for this API
的错误提示。这似乎表明这是一种新的reCAPTCHA API,不是所有人都可以使用。 - Timothy Zorn