静态图片实现验证码功能

foremans 2006-10-21 12:34:11
验证码的作用其实很无奈,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
...全文
277 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
foremans 2006-10-23
  • 打赏
  • 举报
回复
远离比较简单,我有10张图片都是0,但颜色形状不同(自计画的),当我的随机验证码有0,我从10张里面随即抽出一张,读取作为二进制数据返回作img的source

我就是把图片生成从自动生成转成事先人工生成,用人的艺术创作代替了软件的噪音,杂点的干扰算法,为了减少开销,像你说的,好处就是简单,没有什么效率损失,谁都能做。你可以到我站点试试就知道了。
iuhxq 2006-10-23
  • 打赏
  • 举报
回复
第一我没看明白你的实现原理,第二,你这么实现有什么优势?
foremans 2006-10-23
  • 打赏
  • 举报
回复
赫赫,说到了这个方法的缺点,就是图片分开了,如果用户把360张图片全部刷新浏览过了,然后死比较,这方法就失效了,这也是为什么要设计多张图片,多种格式的原因。
就是说,100选4,360选6,什么时候能选全的问题,也是有解决方法,简单的如使用位图文件,将4个图片merge成为一张BMP图片,就能够预防这个问题,如果觉得逐行merge位图不过那样的话操做仍然麻烦,不算效率很高了,但是比起图形操作,还是可取的
iuhxq 2006-10-23
  • 打赏
  • 举报
回复
这样子猜中的概率可不是10*10*10*10啊

因为我读取第一个图片,我根据我预先掌握的所有(每个数字你做10种,那也就100种)图片比较 ,很容易的出你的数字是什么。从100个里找一个,不用1秒就可以找到。

foremans 2006-10-21
  • 打赏
  • 举报
回复
我不懂神经网络,权当他能够破解好了,只是抛砖,他神经了也未必来破解我,破解我了我也未必神经
chaircat 2006-10-21
  • 打赏
  • 举报
回复
很明显.....神经网络可以轻松破解.......

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧