图形验证码安全

目录

图形验证码

图形验证码的作用和原理

图形验证码的分类

图形验证码的验证过程

图形验证码的安全问题

静态图形验证码的破解

利用Python脚本破解静态图形验证码


图形验证码

我们经常在登录app或者网页的时候,都会需要我们输入图形验证码上的内容,以验证登录。有些是纯数字的图形验证码,有些是字母和数字,有些是图案,有些是数学表达式......不同的网站,采用的图形验证码的形式也不一样。那么,图形验证码到底是什么呢?

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

图形验证码的作用和原理

作用:图形验证码的主要作用是强制进行人机交互,以此来抵御机器自动化攻击,可以防止恶意破解密码、刷票、论坛灌水,有效防止黑客对某一个特定注册用户用特定程序暴力破解进行不断的登陆尝试。

原理:图形验证码的问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

图形验证码的分类

图形验证码是现在大多数网站登录通行的方式。不同的网站,由于其安全级别不一样,网站开发人员掌握的技术不一样,使用的图形验证码的种类也不一样。大体上,图形验证码可以分为以下几类:

  • 传统图形验证码
  • 广告型的图形验证码
  • 滑动验证码
  • 图标选择与行为辅助验证码
  • 点击式的图文验证与行为辅助
  • 智能验证码
  • 语音验证码

传统图形验证码
主要是通过用户输入图片中的字母、数字、汉字等进行验证。
代表:大多数网站采用此种验证形式。
特点:简单易操作,人机交互性较好。但安全系数低,容易被破解。



广告型的图形验证码
有精美图案,识别文本也清晰可认,专注于广告。
代表:Solve Media,宇初验证码
特点:与其说是验证码,倒不如说是广告位。



滑动验证码
按要求将备选碎片滑动到正确的位置,或者滑动图标到末尾
代表:极验验证码
特点:操作简单,体验好。单一纬度,容易被逆向模拟,与移动端页面切换不兼容。


图标选择与行为辅助
给出一组图片,按要求点击其中指定的一张或者多张图片。
代表:点触验证码、Google新型验证码、12306验证码
特点:安全性强,对于图片、图库、技术要求高。



点击式的图文验证与行为辅助
通过文字提醒用户点击图中相同字或者相同图标的位置进行验证。
代表:淘宝新型验证码、点触验证码
特点:操作简单,体验良好,单一图片区域较大,破解难度大。



智能验证码
通过行为特征、设备指纹、数据风控等技术,正常用户免验证,异常用户强制验证
代表:点触智能验证码,支付宝验证码
特点:简单便捷,区分人与机器、人与人、设备与设备

语音验证码
通过机器客服给你打电话,告诉你验证码
代表:滴滴验证码,易到验证码
特点:需要接听客服电话,体验较差,无法破解

图形验证码的验证过程

  • 我们访问一个网站的登录页面
  • 服务器端响应并创建一个新的Session ID,同时生成一个随机图形验证码,服务器端有该Sessino ID对应图形验证码的答案
  • 服务器端将该Session ID和图形验证码发送给客户端
  • 客户端填写登录表单,并且填入该图形验证码的答案
  • 服务器端收到用户提交的登录数据,取出Session ID与图形验证码的答案,并且与服务器端相同Session ID的图形验证码答案做比较,如果相同,再判断提交表单的用户名,密码等其他信息。如果图形验证码错误,随即返回验证码错误

注意:这里需要注意的是,Session ID销毁的条件是用户提交的图形验证码和用户名密码等其他信息正确,即登录成功,或者是用户手动刷新验证码

图形验证码的安全问题

既然图形验证是用来抵御机器自动化攻击,防止恶意破解密码、刷票、论坛灌水,防止黑客攻击等威胁的一种手段。道高一尺魔高一丈,那么恶意用户肯定会想方设法去绕过或破解图形验证码,来达到其恶意的目的。图形验证码面临的安全问题来自多方面的,既有客户端的问题,也有服务器端的问题,也有验证码本身的技术问题。

客户端的安全问题

  1. 客户端生成验证码,验证码由客户端生成并且仅仅在客户端用验证
  2. 验证码输出在响应包中
  3. 验证码输出在cookie中

服务端的安全问题

  1. 验证码不过期,没有及时销毁Session ID会话导致验证码重复使用
  2. 没有进行非空判断
  3. 产生的验证码内容集内的答案非常有限,导致可以被制作成字典

验证码技术安全问题

比如现在很多类型的图形验证码已经可以通过技术手段识别绕过了,识别图形验证码是计算机科学里的一项重要课题,涉及到计算机图形学,机器学习,机器视觉,人工智能等高深领域。

静态图形验证码的破解

图片灰度化和图片二值化

传送门——> https://blog.csdn.net/qq_36119192/article/details/86012022

文字分隔

为了能识别出字符,需要对要识别的文字图图片进行分割,把每个字符作为单独的一个图片看待

标准化

对于部分特殊的验证码,需要对分割后的图片进行标准化处理,也就是说尽量把每个相同的字符都变成一样的格式,减少随机的程度,最简单的比如旋转还原,复杂点的比如扭曲还原等等

识别

这一步可以用很多种方法,最简单的就是模板对比,对每个出现过的字符进行处理后把点阵变成字符串,标明是什么字符后,通过字符串对比来判断相似度

最好的识别算法,就是神经网络,神经网络是一种模拟动物神经元工作模式的算法,神经网络有多种不同的结构,但是基本架构分为输入层隐含层输出层,输入和输出均为二进制。

利用Python脚本破解静态图形验证码

Python中有很多封装好的神经网络库,把特征值输入神经网络,再输入是对应的什么字符,也就是训练的过程,随着训练的进行,神经网络的内部结构会改变,逐渐向正确的答案靠拢。神经网络的优势是,对于扭曲的字符识别成功率非常高。另外神经网络在信息安全中还可以起到很多其他作用,比如识别恶意代码等等

未完待续。。。

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢公子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值