Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

闲扯验证码的安全性

  验证码依然是目前防止机器操作的普遍方案,但我们也不能因为要防止机器操作就降低用户体验。很多网站的验证码设计是当用户输错时换一个新的,我觉得这么做会让用户很不爽(至少我自己很讨厌这种设计)。其实这么做并不见得会更安全,只是变得更麻烦了而已。
  为什么验证码也要害怕暴力破解呢?而且如果真遇上暴力破解,每次输入错误换一个验证码同样无法解决问题。也许乍看之下那样会比较安全,但如果真算起来,其实只是一种心理安慰而已。
  假如有一个 4 位数的验证码输错后不会变化,那么循环 10000 次就必然会命中。而如果是一个每次输错都会变化的验证码,那么使用同一组数字试 10000 次,命中的概率则为 1-1/e ≈ 63.21% ,直接从这个结果看来,随机验证码确实比固定验证码耐爆破。但关键是比它强多少呢?仔细想想,其实 63.21% 和 100% 的差距还不到一倍,如果只是为了降低爆破的概率,加一个验证码位数就可以带来一个进制倍的提升,显然比这要有效地多。让验证码每次错误都刷新,用户体验简直差到爆。以我的价值观来衡量的话,肯定会提高用户体验,才不去管那蛋疼的概率问题呢。
  其实也没人会蠢到去爆破验证码,因为防爆破实在太容易了。只要把请求频率不合法的连接拉黑即可,就算考虑大堆僵尸主机的攻击也可以采用验证码与 IP 绑定的方法来解决。验证码的敌人不是只懂爆破的小白,而是懂 OCR 算法的大神。记得以前百度贴吧在某段和谐的时间段启用了神兽级验证码,目的就是为了防止 OCR。数字、字母组合的验证码如果没有特殊处理实在太容易被识别了。如果想提高验证码的安全性应该从反识别的角度出发。比如加入汉字,做各种旋转、扭曲等。
  除了图形验证码,现在也挺流行语音验证码的。其实同数字验证码一样,如果不做特殊处理就很容易被识别。也许大家觉得语音验证码更高端,更安全,但事实上语音验证码比图像验证码更容易识别,只是目前网络上语音识别相关的资料比较少而已。
  虽然我觉得验证码是个蛋疼的发明,但就目前而言,它确实还是最管用的。在我有限的认知中,还没有什么优秀的替代方案,不过我相信将来会有的!
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^