当前位置: 首页 > news >正文

验证码的前世今生(前世篇)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

常在网上晃悠的人,对上面这张图都不会陌生。特别是在注册新账号、确认交易时,它们都会频繁出现,要求我们输入正确的验证码,那这些看上去跟我们要做的事情完全无关的验证码到底有何作用呢?

常在网上晃悠的人,对上面这张图都不会陌生。特别是在注册新账号、确认交易时,它们都会频繁出现,要求我们输入正确的验证码,那这些看上去跟我们要做的事情完全无关的验证码到底有何作用呢?

0×1 诞生

首先,先介绍下验证码程序的提出者,路易斯·冯·安(Luis von Ahn)。2002年,路易斯和他的小伙伴在卡内基梅隆第一次提出了CAPTCHA(验证码)这样一个程序概念。该程序是指,向请求的发起方提出问题,能正确回答的即是人类,反之则为机器。这个程序基于这样一个重要假设:提出的问题要容易被人类解答,并且让机器无法解答。

在当时的条件下,识别扭曲的图形,对于机器来说还是一个很艰难的任务,而对于人来说,则相对可以接受。yahoo在当时第一个应用了图形化验证码这个产品,很快解决了yahoo邮箱上的垃圾邮件问题,因此图形类验证码开始了大发展时期。

0×2 发展与问题

图形化验证码在被证明有效后,在互联网上迅速得到了推广。国内外各大网站,在关键的业务点上都加入了这一类型的验证码。

首先,由于开发者水平的良莠不齐,导致验证码本身的实现存在问题,从而导致漏洞可以绕过,常见的有以下几种类型:

[1] 验证码的生成逻辑、答案用户可见

如将验证码答案输出到页面中、写在cookie里。打比方就是说,在发卷的时候,把答案写在了卷子背面。(老师再也不用担心我的成绩)

[2] 验证码的生命周期未控制好

如验证码可以重复使用、不设超时。验证一次,永久使用。

[3] 业务逻辑与验证码结合点存在问题

如修改业务参数可导致不用校验验证码也可通过、甚至验证码就是摆设。结合到具体的业务点上有什么危害呢?

a. 验证码写在cookie中。此处可导致旅客信息泄露。

b. 验证码与图片存在对应关系,因此直接访问html即可得到答案。此处可导致撞库与暴力破解密码。

 

(上述两例转自乌云)

0×3 图片验证码对抗与攻击升级

在开篇我们提到了一个重要的假设:

CAPTCHA提出的问题要容易被人类解答,并且让机器无法解答。

实际上,CAPTCHA所要处理的问题是:将普通人与恶意的用户(黑客、垃圾消息发送者)区分开来。那当时间点到达2016年时,黑客们与普通用户之间的差距已经很大了(想象下中国足球队对巴西足球队,而且此时留给中国队的时间已经不多了)。

因此,CAPTCHA在图片验证码这一应用点上已经无法满足这一假设了。在这段时间内,出现了很多的加强和识别图形验证码的方法(每一种方法的详细原理和解释,可以参见wooyun drops,在此不做详述):

附上部分名词解释:

》》》查看完整内容

转载于:https://my.oschina.net/zhujian111/blog/813837

相关文章:

  • PHP课程总结20161228
  • 公司地址变更:工商、税务变更流程(转)
  • js 获取 url 中的参数, 并保证获取到的参数不乱码
  • sqlserver2005此数据库没有有效所有者,因此无法安装数据库关系图支持对象的解决方法...
  • JAVA 一个或多个空格分割字符串
  • Michael: 变革管理 应对挑战
  • 如何为你的微信小程序瘦身?
  • A卡于N卡的华山论剑
  • C语言 · 矩阵乘法
  • ”残酷“人生第一步
  • OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)
  • 一个简单的图片查看器
  • JVM:查看java内存情况命令
  • 多线程编程(19) - 不使用同步工具, 手动协调线程依次执行
  • 软工实践总结
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • DataBase in Android
  • eclipse的离线汉化
  • Java多线程(4):使用线程池执行定时任务
  • mac修复ab及siege安装
  • MySQL QA
  • Mysql5.6主从复制
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • Web标准制定过程
  • Zsh 开发指南(第十四篇 文件读写)
  • 解析 Webpack中import、require、按需加载的执行过程
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 我是如何设计 Upload 上传组件的
  • 学习HTTP相关知识笔记
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 如何在招聘中考核.NET架构师
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ![CDATA[ ]] 是什么东东
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #微信小程序:微信小程序常见的配置传旨
  • (16)Reactor的测试——响应式Spring的道法术器
  • (5)STL算法之复制
  • (分布式缓存)Redis哨兵
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (一)Thymeleaf用法——Thymeleaf简介
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • ***通过什么方式***网吧
  • **PHP二维数组遍历时同时赋值
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net 后台导出excel ,word
  • .NET实现之(自动更新)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • ?.的用法
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [ 蓝桥杯Web真题 ]-布局切换