关于图片验证码组件的简单了解

文章目录

    • 图形验证码
        • 作用
        • 基本逻辑
        • 分类
        • 风险
        • 保障验证码安全的关键
        • 目前市面上的主流验证方式
        • 方案分析
    • Demo
        • 随机数字图片验证码方案
        • 滑动图片验证码

图形验证码

作用

  • 图形验证码的主要作用是强制进行人机交互,区分人和机器,以此来抵御机器自动化攻击。比如用户登陆,则机器可以同时、大批量的发起请求,一来系统可能扛不住,二来机器可以不断变换密码来尝试破解用户的密码,实现盗号。

基本逻辑

  • 架构逻辑:
    • 通过设定的规则(规则即指图形生成的规则),将生成的校验值存在服务端(广义的,session/redis/也有直接放在前端),然后用户输入后进行校验。
  • 验证逻辑:
    • 行为式验证的核心思想是利用用户的“行为特征”来做验证安全判别。整个验证框架采用高效的“行为沙盒”主动框架, 这个框架会引导用户在“行为沙盒”内产生特定的行为数据,利用“多重复合行为判别”算法从特指、视觉、思考等多重行为信息中辨识出生物个体的特征, 从而准确快速的提供验证结果。通过机器学习,深度学习对人的行为特征进行大量的分析。建立安全模型去区分人与机器程序。利用深度学习构建的神经网络是可以不断地自主学习的,在不断的验证过程中不断的学习新的特征分析。

分类

  • 设定规则不同:
    • 设定的规则不同可以导致验证形式的不同,如常规的字符验证、运算验证、拼图验证、选字验证等等
  • 校验过程不同:
    • 生成校验值:客户端/服务端
    • 验证校验值:客户端/服务端
  • 验证模型的不同
    • 待研究

风险

  • 客户端的安全问题
    • 客户端生成验证码,验证码由客户端生成并且仅仅在客户端用验证
    • 验证码输出在响应包中
    • 验证码输出在cookie中
  • 服务端的安全问题
    • 验证码不过期,没有及时销毁Session ID会话导致验证码重复使用
    • 没有进行非空判断
    • 产生的验证码内容集内的答案非常有限,导致可以被制作成字典
  • 验证码技术安全问题
    • 比如现在很多类型的图形验证码已经可以通过技术手段识别绕过了,识别图形验证码是计算机科学里的一项重要课题,涉及到计算机图形学,机器学习,机器视觉,人工智能等高深领域。
    • 验证码识别软件:CapMonster

保障验证码安全的关键

  • 架构方面,通过组件的设计来避免客户端/服务端出现校验值暴露等问题
  • 行为验证方面,通过行为沙盘、检测模型的设计区别人和机器的行为来防止自动化的恶意程序。

目前市面上的主流验证方式

  • 基于组件的验证:
  • 基于云的分级验证:验证码的人工智能分级引擎,经大数据筛选后,能够准确识别可信、可疑和恶意用户
    • 无感验证:基于环境等多维度信息进行高效防御,可信用户一键登录
    • 一键验证:基于环境等多维度信息进行高效防御,可信用户只需一键点击即可完成验证
    • 滑块验证:基于行为识别的滑块验证:可以通过滑动滑块的响应时间,拖拽速度,时间,位置,轨迹,重试次数等来评估风险
    • VTT语义验证:相对于滑块类型,
      • VTT 动态语义验证码难度更高,具有更强的人机对抗能力。VTT 动态语义验证码需要用户根据题目,选出图中的一个或多个答案物体,并将用户的选中区域提交给后台判断。在保证交互简单无需输入的基础上,实现了良好的对抗效果。VTT 动态语义验证码的图片由后台 3D 渲染随机产生,保证图片不会重复,语义也可以根据图片中的物件属性组合产生,丰富的变化可以有效阻挡恶意交互。
      • 关于图片验证码组件的简单了解_第1张图片

方案分析

  • 纯本地组件、服务端放在接入平台:可扩展比较少
  • 接入平台,那就得提供一些独特的服务,例如利用模型识别可疑行为等
  • 环境检测需要第三方的包来调用?
  • 体验上来说,滑块和动态语义的比较好,不需要键盘录入,但是动态语义可能比较复杂,单纯的语义(识别2D的数字+一些顺序的)应该是可以实现的。

Demo

随机数字图片验证码方案

  • jsp+ajax+java,servlet
  • 来源于https://www.cnblogs.com/h–d/p/8258610.html
  • 基本思路:客户端发出请求,调用后端生成验证码的方法,将值存在session中,并返回一张图片;验证逻辑也放在后端,读入客户的输入,与session的值对比
  • 项目架构:关于图片验证码组件的简单了解_第2张图片
  • 效果:
    关于图片验证码组件的简单了解_第3张图片

滑动图片验证码

  • 基本架构:google kaptcha+springboot

  • 滑动验证码原理

    • 服务器存有原始图片、抠图模板、抠图边框等图片
    • 请求获取验证码,服务器随机获取一张图片,根据抠图模板图片在原图中随机生成x, y轴的矩形感兴趣区域
    • 再通过抠图模板在感兴趣的区域图片中抠图,这里会产生一张小块的验证滑块图
    • 验证滑块图再通过抠图边框进行颜色处理,生成带有描边的新的验证滑块图
    • 原图再根据抠图模板做颜色处理,这里会产生一张遮罩图(缺少小块的目标图)
    • 到这里可以得到三张图,一张原图,一张遮罩图。将这三张图和抠图的y轴坐标通过base64加密,返回给前端,并将验证的抠图位置的x轴、y轴存放在session、db、nosql中
    • 前端在移动方块验证时,将移动后的x轴和y轴坐标传递到后台与原来的x坐标和y轴坐标作比较,如果 在阈值内则验证通过,验证通过后可以是给提示或者显示原图
    • 后端可以通过token、session、redis等方式取出存放的x轴和y轴坐标数据,与用户滑动的x轴和y轴进行对比验证
  • https://gitee.com/gester/captcha &&https://blog.csdn.net/YTenderness/article/details/99969355

  • 效果:
    关于图片验证码组件的简单了解_第4张图片

你可能感兴趣的:(工作)