今天,我将结合自己以往在安全测试方面的一些经验,简单的分享一下图形验证码相关的安全问题,要回答上面这个问题,我们需要先了解一些关于图形验证码的基本知识。
验证码是什么?
验证码(CAPTCHA)即“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。
它有什么作用呢?
简单概括如下:
验证码在网络投票、交友论坛、网上商城等业务中,经常用来防止恶意用户侵入、恶意灌水、刷票,爆破、撞库、接口滥用等问题,为防止客户端用程序进行自动识别,因此图片中通常要加上一些干扰象素,由用户肉眼识别其中的验证码信息。客户输入表单提交时,验证码也提交给网站服务器,只有验证成功,才能执行相应的操作,其在Web安全中有着重要的应用。
好了,废话不多说,为了回答我们最初的问题,我们必须要知道图形验证码在设计和使用中有哪些坑,哪些地方容易出问题。
列举一些在安全测试中发现的设计和使用上的安全问题
供大家参考(欢迎大家补充,指正)
设计或使用方法不当:
0x01:图形验证码数值在返回包中返回前端(可通过自动化程序输入验证码,导致验证码无效,导致防护失效)
0x02:图形验证码的值由前端生成,发送到后端形成图片
0x03:图形验证码验证后不失效(成功或失败都应该失效),可以无限复用
0x04:单独验证图形验证码,正确返回1,错误返回0,而认证请求却不包含图形验证码(可以绕过前端验证)
0x05:万能图形验证码(测试环境为方便设置的万能验证码,上线后未关闭)
0x06:验证码参数值为空时不检测图形验证码
0x07:无验证码参数时(参数名和参数值都不存在)不检测图形验证码(一般是之前设计的时候没加图形验证码,后期添加图形验证码时保留了老接口)
0x08:验证码大小值由前端控制,后端无大小检测(生成超大图形验证码,造成内存耗尽,拒绝服务)
0x09:图形验证码过于简单(无扭曲,无干扰线导致,可自动化图像识别)
0x0A:认证过程中,先验证账号密码,后验证图形验证码(逻辑顺序有误,验证码起不到防护作用)
0