注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

node.js验证码实例:很有爱的验证码  

2011-11-11 16:50:33|  分类: node |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
如果您想找简单的,常规的nodejs验证码captcha,传送门在这里:





正是开始:

最近宝宝参加了一个网络投票活动,无奈主办方使用了中文验证码,再加上扭曲,噪点,横线等等防识别,让我们投票者苦不堪言,往往要尝试几次才能成功投票。

这里要批评一下主办方,限制网络投票的规则太霸道。虽然主办方对IP设了限制,但是对30分钟内网络投票超过50票的也都一概认为作弊,删除这30分钟内的所有票,这样的做法实在欠妥!!完全可以根据cookie,ip,浏览器等系统信息写一套更为完善的规则,比如判断连续N票之间的间隔如果都小于10秒的话可以认为是机器人等。

互联网在不断的发展,但是验证码从它诞生至今,非但在用户体验上没有很大的进步,反而为了防止被工具软件识别,越来越难辨认。有什么好的方法可以不仅可以提高用户体验而且难以被工具软件识别呢?

前几天我就设计了一款验证码,用户体验和传统验证码差别很大,而且传统的识别工具无法攻破这个验证码,当然它也有一些缺陷可以被识破,但是这毕竟只是一个demo。
先放演示地址:
http://www.rrestjs.com/message 
大家可以试试回复或者留言,填好内容以后就会弹出验证码了。
有兴趣看源代码的也可以通过上面的链接跳过去。

简单说下实现吧:

1、客户端填写好内容,按提交按钮,就会发送一个ajax请求给服务端要求获取验证码。
2、服务端接收到客户端想要获取验证码的请求,去图片池中随机找到4张图片排列好(注:这里的4张图片数量可以任意更改),并随机对这4张图片中的其中一张选定为标准答案,标记正确答案的图片位置,例如为:3。
3、将这张图片的id,当前时间,标准答案位置等存入mongodb验证码集合中,然后返回一个唯一标识_id。并且将这个_id以及这4张图片返回给客户端(注:为了防止图片被任意下载,4张图片的地址已经做了rewrite,如果日后商用,则还需先将这些图片加噪点,横线或背景色然后再返回给客户)
4、用户获取到验证码后进行选择,将其中一张图片拖拽到方框中,发送ajax请求,尝试提交。
5、服务端拿到用户提交过来的图片位置和_id去mongodb中比对
a\如果正确,则完成提交,将留言信息插入mongodb中,并删除验证码集合中的记录。
b\如果失败,则提示失败,删除验证码集合中的记录。用户重复第1步操作。
6、服务端将跑一个循环脚本,每30分钟删除一次超时30分钟的验证码记录(即那些获取了验证码,但是又没有操作的用户)

特点:
1、由于图片展示的是生活用品或是其他东西,无规律可循,所以图片识别工具无法对例如:“小鸭子”这个词语进行识别图片。
2、由于图片请求地址重新rewrite了,并且目前设定该请求地址1分钟后失效,所以只要恶意用户未破解我生成的随机码,就拿不到我的图片池中所有的图片,所以随机码的生成就相当重要了。
3、如果投入商用,需要加上噪点和横线,所以恶意用户对同一张图片进行大小判断或是二进制码判断都将比较困难,而且如果我的图片池足够大,比如有几万张图片进行组合,恶意用户需要先人工大部分都跑一次才能进行攻击,给攻击增加了门槛。
4、用户体验比文字输入好很多,对于一些不会打字的老年人尤其好用。
5、这个验证码库完全可以让用户来进行维护,可以开放API让网站用户上传图片和对应的文字说明,管理员只是审核一下,这样不仅可以吸引用户访问您的网站,也可以很轻松的壮大图片验证码池。
  评论这张
 
阅读(9561)| 评论(10)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016