如何设计相对安全的图形验证码?

0x00 验证码是什么

验证码(CAPTCHA)即“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。

0x01 有什么作用

简单概括如下:

验证码在网络投票、交友论坛、网上商城等业务中,经常用来防止恶意用户侵入、恶意灌水、刷票,爆破、撞库、接口滥用等问题,为防止客户端用程序进行自动识别,因此图片中通常要加上一些干扰象素,由用户肉眼识别其中的验证码信息。客户输入表单提交时,验证码也提交给网站服务器,只有验证成功,才能执行相应的操作,其在Web安全中有着重要的应用。

 

好了,废话不多说,为了回答我们最初的问题,我们必须要知道图形验证码在设计和使用中有哪些坑,哪些地方容易出问题。

0x02 设计或使用方法不当

  1. 图形验证码数值在返回包中返回前端(可通过自动化程序输入验证码,导致验证码无效,导致防护失效)
  2. 图形验证码的值由前端生成,发送到后端形成图片
  3. 图形验证码验证后不失效(成功或失败都应该失效),可以无限复用
  4. 单独验证图形验证码,正确返回1,错误返回0,而认证请求却不包含图形验证码(可以绕过前端验证)
  5. 万能图形验证码(测试环境为方便设置的万能验证码,上线后未关闭)
  6. 验证码参数值为空时不检测图形验证码
  7. 无验证码参数时(参数名和参数值都不存在)不检测图形验证码(一般是之前设计的时候没加图形验证码,后期添加图形验证码时保留了老接口)
  8. 验证码大小值由前端控制,后端无大小检测(生成超大图形验证码,造成内存耗尽,拒绝服务)
  9. 图形验证码过于简单(无扭曲,无干扰线导致,可自动化图像识别)
  10. 认证过程中,先验证账号密码,后验证图形验证码(逻辑顺序有误,验证码起不到防护作用)
  11. 验证码图片中数值不够随机,可预测导致可以猜解。

0x03 如何设计出一个相对安全的图形验证码

设计上:

  1. 验证码字符集合和长度应可配置,至少四位,不允许单独使用英文字符或数字。
  2. 验证码要能够置设置背景色、字符颜色、字符旋转、扭曲、字符粘连等,要添加干扰线,干扰线的颜色、尺寸和数量要可通过配置进行设定。
  3. 验证码生成过程中不仅要使用安全随机函数还要确保种子绝对随机的,保证每次生成验证码的唯一性和不可预测性,防止重放攻击。
  4. 针对一次请求生成的验证码只能用一次,用完立即过期。每次生成的验证码不允许跨会话和请求使用。
  5. 验证码内容不允许以任何形式输出到客户端包括验证码的MD5值、 Base64转码值等。

另外图形验证码使用上应注意:

  1. 验证码参数和认证参数需要一起提交,到后端验证时要先验证验证码,正确后再进行后续认证。
  2. 后台系统中验证码的验证逻辑要先于口令的验证,只有通过验证码的验证后才能进行用户名、口令等其他身份信息的验证过程。
  3. 线上系统不应存在万能验证码,或不验证验证码内容的情况

发布者:常山赵子龙,转载请注明出处:https://www.qztxs.com/archives/science/technology/11678

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年6月2日 上午10:51
下一篇 2022年6月2日 上午10:52

相关推荐

  • 某鱼App加密参数x-sign生成教程

    通过对某鱼App抓包,可发现数据请求接口中都必须携带x-sign参数,而x-sign参数的生成方式不得而知,只能通过对App进行反编译破解。本教程将利用HermesAgent框架实现对x-sign生成方法的Hook及远程调用签名方法。 本教程以某鱼App v6.5.10版本为例 第一步:反编译某鱼App 利用dex2jar工具反编译某鱼APK文件,反编译具体...

    2022年5月7日
    34100
  • MyISAM与InnoDB的索引,究竟有什么差异?

    数据库的索引分为主键索引(Primary Inkex)与普通索引(Secondary Index)。InnoDB和MyISAM是怎么利用B+树来实现这两类索引,其又有什么差异呢?这是今天要聊的内容。   一,MyISAM的索引 MyISAM的索引与行记录是分开存储的,叫做非聚集索引(UnClustered Index)。 其主键索引与普通索引没有本质差异: ...

    2022年5月11日
    2400
  • 企业安全建设中用到的开源or“免费”的工具

    跳到甲方工作也差不多两年了,参与部分企业安全建设工作,主要工作还是渗透和开源平台的建设和维护使用 在这种“甲方”的工作体会就是 公司不是很重视安全这块,网络安全法出台,明确要求企业要做等保测评,招个人做吧 没有资源,要钱没有,要人没有,好在研发的小伙伴和运维小伙伴比较支持工作 两年里,搭建了很多开源的系统,在这里分类了一下, 如果有更好的 欢迎推荐 安装和使...

    技术 2022年5月27日
    5400
  • 究竟能不能,不引入数据库中间件?

    不少朋友经常会问我以下问题: (1)快狗打车有没有使用数据库中间件? (2)使用了什么数据库中间件,是自研,还是第三方? (3)怎么实现的,是基于客户端的中间件,还是基于服务端的中间件? (4)使用中间件后,join/子查询/集函数/事务等问题是怎么解决的? (5)… 你是不是也有类似的疑问?   “究竟为什么要引入数据库中间件”却很少有人问及,今天和大家聊...

    2022年5月11日
    1800
  • mysql-python安装时mysql_config not found

    0x00 描述 mysql-python安装时提示mysql_config not found 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # pip install MySQL-python Collecting MySQL-python Using cached https://files.pythonhosted.org/pack...

    技术 2022年5月27日
    3000

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信