FinOps有望降低企业50%+的云成本! 了解详情
写点什么

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

  • 2020-02-12
  • 本文字数:1337 字

    阅读完需:约 4 分钟

如何设计相对安全的图形验证码
今天,我将结合自己以往在安全测试方面的一些经验,简单的分享一下图形验证码相关的安全问题,要回答上面这个问题,我们需要先了解一些关于图形验证码的基本知识。


验证码是什么?


验证码(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:认证过程中,先验证账号密码,后验证图形验证码(逻辑顺序有误,验证码起不到防护作用)

  • 0x0B:验证码图片中数值不够随机,可预测导致可以猜解。


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


设计上:


1)验证码字符集合和长度应可配置,至少四位,不允许单独使用英文字符或数字。


2)验证码要能够置设置背景色、字符颜色、字符旋转、扭曲、字符粘连等,要添加干扰线,干扰线的颜色、尺寸和数量要可通过配置进行设定。


3)验证码生成过程中不仅要使用安全随机函数还要确保种子绝对随机的,保证每次生成验证码的唯一性和不可预测性,防止重放攻击。


4)针对一次请求生成的验证码只能用一次,用完立即过期。每次生成的验证码不允许跨会话和请求使用。


5)验证码内容不允许以任何形式输出到客户端包括验证码的 MD5 值、 Base64 转码值等。


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


6) 验证码参数和认证参数需要一起提交,到后端验证时要先验证验证码,正确后再进行后续认证。


7)后台系统中验证码的验证逻辑要先于口令的验证,只有通过验证码的验证后才能进行用户名、口令等其他身份信息的验证过程。


8)线上系统不应存在万能验证码,或不验证验证码内容的情况


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/181


2020-02-12 15:35966

评论

发布
暂无评论
发现更多内容

课程作业及比赛任务,已支持 Notebook 内直接提交|ModelWhale 版本更新

ModelWhale

人工智能 机器学习 数据分析 canvas 模型管理

GitHub上线重量级分布式事务笔记,再也不怕面试官问分布式了

小小怪下士

Java 程序员 分布式 分布式事务 后端

Region is unavailable的排查总结

TiDB 社区干货传送门

管理与运维 故障排查/诊断 扩/缩容

Stable Diffusion原理详解

jarodyv

人工智能 机器学习 计算机视觉 Stable Diffusion 生成式AI

Atlassian Server用户新选择 | 云版和本地部署的数据中心版,总有一个适合您

龙智—DevSecOps解决方案

迁移 Server Atlassian

首届玄铁 RISC-V 生态大会上海举办 龙蜥操作系统持续深度参与标准共建

OpenAnolis小助手

芯片 risc-v 龙蜥操作系统 平头哥 生态大会

基于Mindspore2.0的GPT2预训练模型迁移教程

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜

FL Studio21最新版DAW数字音频工作站

茶色酒

FL Studio FL Studio 21

基于 Flink 流计算实现的股票交易实时资产应用

Apache Flink

大数据 flink 实时计算

从代理机制到Spring AOP,这篇给你安排得明明白白的

做梦都在改BUG

Java spring aop 代理机制

AI+人类,实现高效网络安全

HummerCloud

人工智能 网络安全

CI/CD | 不可忽略的Jenkins基础架构修复问题

龙智—DevSecOps解决方案

ci cicd jenkins CI/CD CloudBees

云图说丨Astro Canvas一站式数据可视化开发,分钟级构建业务大屏

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

从“13天”到“0天”延时,揭秘火山引擎DataLeap SLA保障最佳实践

字节跳动数据平台

大数据 数据治理 数据研发 企业号 3 月 PK 榜

TiDB 的事务和一致性校验工具 BANK

TiDB 社区干货传送门

实践案例 故障排查/诊断 数据库架构选型

物理机安装 TiKV 时 RAID 卡在线配置方式

TiDB 社区干货传送门

实践案例 集群管理 安装 & 部署

详解命令模式本质及其在高复杂调用中的实践案例

阿里技术

设计模式 命令模式

DBT 收购 Transform,指标平台已成现代数据栈关键拼图

Kyligence

数据分析 指标管理

数据标注工具,多维度体验优化|ModelWhale 版本更新

ModelWhale

人工智能 标注 标注工具 团队协同 模型管理

DTO、VO、BO、PO、DO的用法区别,居然这么多人搞不清楚.....

程序知音

思码逸任晶磊:ChatGPT 时代的软件研发数据与效能提升

思码逸研发效能

机器学习 研发效能 ChatGPT

CleanMyMac4.20汉化免费版Mac清理工具

茶色酒

CleanMyMac4.20

MQTT 5.0连接属性

EMQ映云科技

物联网 IoT mqtt 企业号 3 月 PK 榜 连接属性

关于加解密、加签验签的那些事 | 得物技术

得物技术

java

Oracle ASM磁盘组配置、日常运维、故障处理等操作资料汇总

墨天轮

数据库 oracle asm 磁盘管理

柏拉图会反对ChatGPT吗?~深度好文| 社区征文

李韧

人工智能 ChatGPT

通过TiDB Operator为已有TiDB集群部署异构集群

TiDB 社区干货传送门

集群管理 管理与运维 故障排查/诊断 安装 & 部署 扩/缩容

代码质量与安全 | SAST与DAST有什么区别?

龙智—DevSecOps解决方案

klocwork SAST DAST 静态应用程序安全测试 动态应用程序安全测试

研讨会回顾 | Perforce发布数字资产管理工具Helix DAM,帮助您按时按预算交付虚拟产品

龙智—DevSecOps解决方案

版本控制 数字资产 游戏开发 数字资产管理 芯片研发

你没有必要完全辞去工作

宇宙之一粟

创业 个人成长 思维方式 工作 打工人

vivo全球商城:库存系统架构设计与实践

vivo互联网技术

系统架构 电商 库存

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
如何设计相对安全的图形验证码_文化 & 方法_heh3_InfoQ精选文章