CNET中国旗舰网站

ZDNet China | CNET科技资讯网 | 政府采购 | 行业网站联盟





 
标题: [观点] 静态图片实现验证码功能
大黄蜂
支柱会员
Rank: 10Rank: 10Rank: 10



UID 319163
精华 5
积分 17513
帖子 1256
威望 8124
ZD币 1987 元
阅读权限 210
注册 2008-4-15
状态 离线
  楼主
发表于 2008-4-17 14:22  资料  个人空间  短消息  加为好友 
开发者在线

静态图片实现验证码功能

验证码的作用其实很无奈,1,防止暴力破解,2,防止大规模发贴攻击,取代了时间session机制,后者只能防灌水   
  大中小网站几乎无一例外都或多或少用了这一功能,虽然很多网站都不值得攻击,甚至不值得一看   
  很多小网站和爱好者们也是跃跃欲试,采用了各种各样的方法,XMP,   BMP,JPG格式,五花八门,很多都是简单的生成图片,   
  只防小人,不防黑客,如果真的较真,简单图片识别可以解决打开大部门网站的大门,愉快地灌入滔滔洪水   
   
  这里我只想提一个很简单的方法来实现验证码的效果   
  验证码的关键实际上是缩小盲目猜测的几率,越小越好,而不是生成的图片越土老帽,越难认越好   
  自然地,我们可以采取一些折衷讨巧的办法,而不是靠技术,去实现hotmail那样的带语音朗读的   
  假如我有10张不同的静态图片,用户猜中的几率就是1/10   
  假设这就够了!让我们先来解决图片src的问题,显然我们需要伪装的图片src,否则什么用也没有   
  显然,图片必须是读出来的,而不是返回图片URI,e.g.   
  http://host/getimg.apsx?id=1   代表第一张显示的图片,效率不回损失很多,如果把图片直接放入全局变量的话   
  如果我们的验证码一共4位,那么简单的来说,就是   
  <img   src=sss?id=1><img   src=sss?id=2>...   
  4位验证码几率是1/10000,似乎解决了问题,我们可以用这种1/10000的几率的代码么?当谈不是,现在来缩小几率,原理很简单   
  增加图片数量,和验证码位数,我们有0-9,a-Z一共36个简单符号,6位验证码,几率是1/2176782336   
   
  如何?应该够了,现在来解决图片识别的问题,首先,图片是你自己定义的,想怎样复杂都行,   
  因此图像识别几乎是可以控制的,因为随时可以改变图片内容,但是这样一来,问题也来了,那就是死记来比较,   
  假设一个用户刚好把我们36张图片全浏览过了,然后每次就进行比对,我们的验证码不攻自破!   
  既然如此,我们就得再想办法了,假设现在我们36个字符各有10种不同风格,大小的图片,计算一下用户可能核对比较成功的   
  几率.   
    尺寸准确需要1000000次,然后每次需要比较36*6次,也就是说一共运算2亿次可以破解   
  当然,这是建立在你的图片是在巧夺天工,图像识别几乎不可能来说的.   
          有人愿意用2亿次图片对点来做一次破解,仅仅为了发表一篇稍微带点恶意的广告?   
  因此,如果你暴力猜测,几率是2亿次,暴力比较,几率也是两亿次...   
  而我们,有360张精心设计的图片,就放在服务器你不能访问的地方.   具体例子参照www.justee.com




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
 



当前时区 GMT+8, 现在时间是 2009-7-5 09:18

  Powered by Discuz! 5.5.0 © 2001-2007 Comsenz Inc.
Processed in 0.062643 second(s), 3/3 queries

清除 Cookies - 联系我们 - ZDNetChina中文社区 - 无图版