`
rikugun
  • 浏览: 350445 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

reCAPTCHA 学习

    博客分类:
  • PHP
阅读更多
最近在帮朋友写一下小的申请页面,里头有用到验证码来防止恶意注册.
想了一下没能耐造轮子,还是拿来就用吧.找了一下,发现reCAPTCHA 这个非常不错,还支持声音,不过验证码看起来有点模糊.做一下笔记

先看看它的工作流程

   1.   The user loads the web page with the reCAPTCHA challenge JavaScript embedded.
   2. The user's browser requests a challenge from reCAPTCHA. reCAPTCHA gives the user a challenge and a token that identifies the challenge.
   3. The user fills out the web page form, and submits the result to your application server, along with the challenge token.
   4. reCAPTCHA checks the user's answer, and gives you back a response.
   5. If true, generally you will allow the user access to some service or information. E.g. allow them to comment on a forum, register for a wiki, or get access to an email address. If false, you can allow the user to try again.


然后,你得有个帐号,然后生成一个key,跟Google的adsense类似
移步这里去申请一个,然后生成你的key.

好,先在客户端加上一段js,这样就可以加载这个验证码了
这里有2种方式生成这个验证码,一个是在form中直接添加js代码
<script type="text/javascript"
   src="http://api.recaptcha.net/challenge?k=<your_public_key>">
</script>

<noscript>
   <iframe src="http://api.recaptcha.net/noscript?k=<your_public_key>"
       height="300" width="500" frameborder="0"></iframe><br>
   <textarea name="recaptcha_challenge_field" rows="3" cols="40">
   </textarea>
   <input type="hidden" name="recaptcha_response_field" 
       value="manual_challenge">
</noscript>


它将在form中生成2个input, recaptcha_challenge_field (系统生成的值) 和 recaptcha_response_field (用户输入值)
引用

These APIs create two form fields: recaptcha_challenge_field is a hidden field that describes the CAPTCHA which is put on the page. recaptcha_response_field is a text field where the user can enter their answer.


还有一种方式是用ajax的方式生成,这里有个 demo.

在head中插入
<script type="text/javascript" 
 src="http://api.recaptcha.net/js/recaptcha_ajax.js"></script>

然后用类似
Recaptcha.create("6LdIEwAA......", //这个是 public_key
"recaptcha_div",     // 生成位置的ID
 {    
   theme: "red",    //显示主题
   callback: Recaptcha.focus_response_field   //回调函数
});

来,在"recaptcha_div" 中生成的验证器.

关于界面的定制
我们可以用类似
var RecaptchaOptions = {
   theme : 'white',
   tabindex : 2
};

来定制界面,当然还包括语言,
需要注意的是,默认语言界面里头没有简体中文,我们可以用它的custom_translations 属性来自定义中文,我在js代码中找到了英文的定义,然后手工翻译一下
var RecaptchaStr_en = {
visual_challenge : "Get a visual challenge",
audio_challenge : "Get an audio challenge",
refresh_btn : "Get a new challenge",
instructions_visual : "Type the two words:",
instructions_audio : "Type what you hear:",
help_btn : "Help",
play_again : "Play sound again",
cant_hear_this : "Download sound as MP3",
incorrect_try_again : "Incorrect. Try again."
};

粗糙翻译一下,欢迎拍砖:
var RecaptchaOptions = {
   custom_translations : {
    visual_challenge : "获取图形验证码",
    audio_challenge : "获取声音验证码",
    refresh_btn : "获取新的验证码",
    instructions_visual : "输入2个单词:",
    instructions_audio : "输入您听到的:",
    help_btn : "帮助",
    play_again : "重播",
    cant_hear_this : "下载语音为MP3",
    incorrect_try_again : "错误. 请重试." 
    }
};


这里还有详细的 客户端 API,大家可以围观.

服务端部分
我写的程序是用php的,先看看php的api吧,Java的也有,但还没研究,回头再贴出来

首先你得下载它的依赖库

然后
require_once('recaptchalib.php');
$publickey = "..."; // 申请的public key
echo recaptcha_get_html($publickey);  //生成获取验证码的html代码,类似前面的用js生成 



recaptcha_get_html 函数有3个参数

recaptcha_get_html($pubkey,$error ,$use_ssl)

$pubkey -- string. 必需.  public key

$error -- string. 可选(默认null) 如果设置了值, reCAPTCHA 会显示这个错误的代码. 错误代码来自 ReCaptchaResponse->$error

$use_ssl -- boolean. 可选(默认false) 是否启用ssl


校验验证码

主要的方法是 recaptcha_check_answer()
require_once('recaptchalib.php');
$privatekey = "...";
$resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

if (!$resp->is_valid) {
  die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
       "(reCAPTCHA said: " . $resp->error . ")");
}



它有4个参数
$privkey -- string. 必需. 申请的 private key
$remoteip -- string. 必需. 用户的ip,格式:192.168.0.1
$challenge -- string. 必需recaptcha_challenge_field 字段的值,来自前台页面
$response -- string. 必需 recaptcha_response_field 字段值
Return value 返回 ReCaptchaResponse class 的实例

ReCaptchaResponse 类有2个属性
$is_valid -- boolean  校验是否有效?
$error -- string 返回的错误代码


0
0
分享到:
评论
3 楼 二年级chuck 2013-08-08  
哪里有Java的验证。
2 楼 xiha211 2010-02-26  
这个还挺详细的,thanks
1 楼 meteormatt 2009-12-19  
没看懂.
不好意思.

相关推荐

    Python-以91的准确率击败最新版本的ReCaptcha

    标题中的“Python-以91的准确率击败最新版本的ReCaptcha”表明这是一个关于使用Python编程语言,通过机器学习技术来解决谷歌ReCaptcha验证的项目。ReCaptcha是谷歌提供的一种反垃圾机器人服务,它通常用于确保网络...

    Google reCaptcha验证码对接Demo

    在网络安全领域,验证码(CAPTCHA)是用于防止恶意自动化程序(如机器人)滥用服务的一种重要工具。...通过学习和实践,你可以更好地理解前后端之间的交互,以及如何有效地利用reCaptcha来提高你的网站的安全性。

    解决reCaptcha验证框得到资源

    因此,这些工具更适合个人学习和研究,而非大规模的自动化操作。 总的来说,解决reCaptcha验证框的问题通常涉及对网络请求的深度理解和操作,包括理解HTTP请求头和网络流量的拦截。通过使用`Header Editor`和`...

    recaptcha-demo:Java 中的 google recaptcha 演示

    reCAPTCHA是Google推出的一种高级验证码系统,它通过人工智能和机器学习技术来区分人与机器,提高了用户体验,同时保持了安全性。 首先,让我们详细了解reCAPTCHA的工作原理。reCAPTCHA会向用户展示一个挑战,如...

    recaptcha:Google的Recaptcha服务在行动中,用于机器人验证

    在后台,Recaptcha v2使用先进的机器学习技术来分析用户行为并判断其真实性。 **Recaptcha测试** 在实施Recaptcha时,开发者需要进行测试以确保其正常工作。Google提供了测试工具和API,允许开发者在本地环境或...

    易语言-reCAPTCHA易语言验证例程

    易语言-reCAPTCHA易语言验证...综上所述,"易语言-reCAPTCHA易语言验证例程"涵盖了网络通信、数据解析、安全编程等多个方面,对于想要学习如何在易语言环境中集成高级在线服务的开发者来说,这是一个有价值的实践项目。

    spring-boot-recaptcha-demo:Spring Boot Recaptcha演示

    在`spring-boot-recaptcha-demo-master`这个压缩包中,包含了完整的Spring Boot应用示例,你可以直接运行`mvn clean spring-boot:run`命令来查看和学习这个集成reCAPTCHA的实例。这个例子将帮助你更好地理解和实践...

    node-recaptcha

    每次解决我们的验证码时,人工就可以帮助对文本进行数字化,为图像添加注释以及构建机器学习数据集。 反过来,这有助于保存书籍,改进地图并解决难于解决的AI问题。 ##用$ npm安装$ node app.js 造访:localhost...

    Python-以85的准确度击败Google的音频reCaptcha验证码

    在本文中,我们将深入探讨如何使用Python和机器学习技术来以85%的准确度解决Google的音频reCaptcha验证码。Google的reCaptcha是一种旨在防止自动化机器人进行恶意活动的安全验证系统,它通过向用户播放一段含糊的...

    Buster是一个浏览器扩展用于识别reCAPTCHA语音验证码

    6. **自动化挑战解决**:reCAPTCHA有时会包含额外的图像或滑动验证,Buster可能还包括了处理这些挑战的机制,通过机器学习算法自动识别和解决它们。 7. **持续更新与维护**:随着reCAPTCHA系统的变化,Buster需要...

    recaptcha-play:用于游戏框架的recaptcha v2(nocaptcha)2.4+

    通过机器学习和风险分析技术,reCAPTCHA能够区分人类和机器人,只有在必要时才向用户显示挑战。 7. **测试与调试**:为了确保reCAPTCHA在游戏框架中的正确工作,开发者需要进行单元测试和集成测试,确保在各种场景...

    ASP.NET MVC-reCAPTCHA和电子邮件确认

    **ASP.NET MVC reCAPTCHA与电子邮件确认** 在ASP.NET MVC框架中,开发人员经常需要确保网站的安全性,防止...结合`ASP-NET-MVC-reCAPTCHA-and-Email-Confirmation.pdf`文档,可以更深入地学习这两种机制的实施细节。

    snaplet-recaptcha:具有连接共享功能的 ReCaptcha snaplet

    这不仅有利于学习Haskell和Snap框架,也提供了自定义验证逻辑的可能性。 总结来说,`snaplet-recaptcha`是Haskell开发者在构建Web应用时对抗自动化攻击的强大工具。它结合了Snap框架的灵活性、Heist模板引擎的便利...

    Header Editor 插件

    描述中提到的“Google 人机验证(reCaptcha)无法显示解决方案”是针对谷歌提供的reCAPTCHA服务可能出现的问题。reCAPTCHA是一种反垃圾机器人技术,通常用于防止自动化程序进行恶意操作,如填写表单或发送垃圾邮件。当...

    【浏览器插件】Noptcha v0.1.10,自动识别图片验证码,支持reCAPTCHA和hCAPTCHA

    该插件利用先进的图像识别技术和机器学习算法,自动解析并正确输入验证码,极大地简化了用户体验。这在处理大量需要验证码验证的网页操作时,尤其显得便利。 然而,值得注意的是,自动识别验证码的工具可能引发一些...

    .Net验证码识别程序机器学习.zip

    本资源".Net验证码识别程序机器学习.zip"包含了一个名为"ReCapcha-master"的项目,它很可能是一个针对谷歌的reCAPTCHA验证码识别的解决方案。 1. **机器学习基础**:机器学习是人工智能的一个分支,通过让计算机从...

    模式识别与机器学习:PRMLCourse3-SemiSupervisedLearning.pdf

    而在一些场景中,可以通过一些游戏化的手段如ESP Game或ReCaptcha来利用用户的无意识输入来获取大量无标签数据。半监督学习的目标是从有标签和无标签数据中学习得到一个更好的分类器。 半监督学习分为两大类,归纳...

    cci的matlab代码-Break-reCaptcha:休息-重新验证

    特别是,我们将自动收集测试数据,并应用人工智能的机器学习概念来学习收集的测试数据,人工智能是近年来最流行的技术; 以便计算机可以判断Google本身提供的单词并选择图片。 为此,我们首先考虑如何通过机器学习...

    ReCaptcha plugin for Kooboo CMS:用于Kooboo CMS的ReCaptcha验证程序插件,用于添加内容或发送邮件-开源

    对于开发者来说,这是一个了解如何将第三方服务集成到内容管理系统中的好案例,也是一个深入学习.NET开发和插件机制的实践机会。总的来说,这个开源插件不仅提升了Kooboo CMS的安全性,也为社区带来了更多的创新可能...

    免费验证码工具

    reCAPTCHA的工作原理基于机器学习和人工智能,它通过分析用户的行为模式来判断其是否为真人。例如,系统会检查鼠标移动的轨迹、点击的速度以及用户在页面上的停留时间等。reCAPTCHA v3不再需要用户完成图像识别任务...

Global site tag (gtag.js) - Google Analytics