我最近注册了一个叫做 https://account.oneplus.net/sign-up的网站,注意到了这个复选框
它是如何工作的? 我如何在我的网站上使用它? 比那些隐晦的单词/数字要好得多:)
重演技巧站点没有提到任何新的重演技巧方法... ... https://www.google.com/recaptcha/intro/index.html
这个条目没有回答最初的问题,但是它有助于实现类似的解决方案。正如@IanM 所说,复选框 captcha 还处于测试阶段,没有邀请是不能使用的。
谷歌推出了新的 reCAPTCHA
这是一个基于 JavaScript 的 CAPTCHA。
由于大多数垃圾邮件程序不执行 JavaScript,并且不能识别显示的文本与 DOM 之间的相关性,或者不能单击复选框。
请注意,这里根本没有复选框,它只是一个带有一些 CSS 样式的 div 元素。垃圾邮件机器人试图填写表单输入元素,但在 CAPTCHA 中没有输入。复选标记只是另一个 div (css 类)。
当您单击该框时,一个 ajax 请求通知服务器 div 已被单击,并且服务器将此信息存储在一个临时存储中(标记令牌: 此令牌由人激活)。当您提交表单时,一个隐藏字段将发送已激活的令牌,然后当服务器验证表单信息时,它将识别该令牌已激活。如果不激活令牌,表单将失效。
要点中的步骤:
<input>
<div>
data-*
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."; } }
希望你们中有人会觉得这个有用。