Skip to content

验证码安全

验证码(Captcha):区分用户是计算机和人的公共自动程序。

作用:防止恶意暴力破解、刷票、论坛灌水、刷页、爬虫等;

曾经的验证码

  • 文本验证码:验证码以文字的形式出现,通常可以在html源代码中找到;
  • 图片拼接验证码:由4个图片拼接成为一个验证码;
  • 题库型验证码:大量的计算题组成的验证码库,此种方式最大的危害就是题库是有限的,可以被穷举;

图形验证码

图形验证码风险分析

  • 前端生成验证码:前端生存或者前端校验都会存在绕过问题;
  • 验证码不过期:验证码一直不过期,可以重复有效使用,或者长时间有效使用;
  • 验证码返回在response数据包中;
  • 验证码可识别:OCR技术;

安全的图形验证码设计

  • 验证码后端随机生成,且验证码内容不能出现在客户端的网页源代码以及response数据包中;
  • 验证码要有背景干扰,干扰元素包括:颜色、位置、数量且元素需要随机变化;
  • 验证码后端校验,且使用一次后要求立即失效;
  • 验证码在不同场景下需要与请求的参数一起提交给后端进行校验,且优先校验验证码;

机器自动识别验证码

  • 去噪处理:去掉图像里的干扰信息,如:背景的点、线等;
  • 图像二值化:将图像上的像素点灰度值设置为0或255,也就是将整个图像呈现出黑白效果。目的是为了将图像与空白区分开来,方便后续步骤点进行;
  • 切片处理:将每个字符所在区域分离成一个个点图片,确保一个图片内仅有一个文字;
  • 文字图片标准化:对切片后的每个字符图片,还需要进行变形修复处理,比如:旋转、缩放等操作尽量将每一个字符图片都调整到标准格式,减少随机度;
  • 字符模版识别:通过模版对比的方法识别。

短信验证码

短信验证码风险分析

  • 短信验证码太简单、短信验证码时效风险:一般4位的短信验证码可以在10分钟内暴力破解成功;
  • 短信验证码不与手机号绑定;
  • 短信验证码内容返回在response数据包中;
  • 万能短信验证码:111111、000000、666666、888888;
  • 短信炸弹攻击:由于发送短信接口没有设置频次上限导致;
  • 短信内容自定义:常出现在一些发送短信的后端管理系统中,容易出现类似钓鱼等类型的攻击;
  • 短信平台自身问题:被入侵;
  • 监听:运营商上行与下行可能出现的监听、伪基站、GSM;
  • 手机木马、APP Content Provider设计缺陷、短信同步到云平台导致泄漏;

安全的短信验证码

  • 请求获取短信接口添加图形验证码;
  • 单位时间内:单个IP、单个手机号设置请求限制,具体需要试场景而定;
  • 单个手机号每日短信验证码获取上限;
  • 发送短信接口地址白名单;

语音验证码

语音验证码风险分析

  • 呼叫转移;
  • 语音验证码成本太高;

新一代验证码

  • Google reCaptcha:目前已经更新到第三代
  • 滑动验证码:
  • 点选验证码:

新一代验证码风险分析

  • 接码平台

在线接受短信

易码平台

  • 滑动验证码模拟:Python Selenium

验证码厂商

验证码哪家强?六大验证平台评测

参考资料

验证码安全那些事

浅谈Web安全验证码

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