短信验证码安全常见逻辑漏洞

声明:此文转自http://www.lx598.com/hangyedongtai/978.html (短信验证码安全常见漏洞)

短信验证码常被用于网站用户注册、账户安全登录以及忘记密码、确认下单等应用场景,特别是一些涉及到用户个人敏感行为时候,为了确认操作是用户本人执行的通常会使用短信验证码进行二次认证。

在实际应用中,有很多产品的短信验证码接口存在诸多逻辑漏洞,针对手机短信验证码可能存在的问题,这里总结常见的逻辑漏洞如下,供大家参考:

1、短信验证码接口没有设置下发频次

①无限制,任意下发;

②有一定时间间隔,无限下发;

短信验证码接口没设频次上限导致短信轰炸。这种情况往往出现在一些小站或者子站,这几年很少看到通过GET请求发送短信验证码了,基本都是使用POST请求,使用抓包软件可以重放请求对于后端没有做限制的网站就可以达到短信轰炸的效果。

危害:对用户来说个人生活受到骚扰,对企业来说造成一定的负面影响,很多小公司因为短信验证码接口被大量调用出现运营问题,对于公司没有安全工程师的情况下,一般都是业务方发现了数据异常向上汇报,最后和开发一起反溯才会找到这个问题,那么在这段时间中对企业所损失的钱也是无法挽回的。

预防:这里主要是针对两种攻击场景来进行防御,第一种是对单用户的短信轰炸,即重放发送请求且phonenum为一个值。第二种是对多用户发送短信骚扰的场景,即将phonenum参数设置为字典,重放短信验证码接口。

①设置发送间隔,即单一用户发送请求后,与下次发送请求时间需要间隔60秒。

②设置单用户发送上限,即设置每个用户单位时间内发送短信数的上限,如果超过阈值就不允许今天再次调用短信接口(阈值根据业务情况设置)。

③设置单IP发送上限,这种情况是预防第二种攻击场景的,由于IP的特殊性可能存在所处IP是大出口,一旦误杀后果会很验证,所以这个限制根据自身情况酌情考虑,对于有风控的团队来说,当发现发送IP存在异常可以对该IP增加二次认证来防止机器操作,也可以降低误杀情况。

2、无效验证

有验证码模块,但验证模块与业务功能没有关联性,此为无效验证,一般在新上线的系统中比较常见。

①获取短信验证码后,随意输入验证码,直接输入两次密码,可成功更改用户密码,没有对短信验证码进行验证,可能导致CSRF等问题。

②任意用户注册

第一步,利用自己的手机号接收验证码进行验证,下一步跳转到一个设定密码的页面

第二步,抓包,篡改手机号,使用任意手机号进行注册

问题剖析:业务一致性存在安全隐患,身份验证与密码修改过程分开,验证无效。

3、客户端验证绕过

客户端验证是不安全的,可能导致任意账号注册、登录及重置任意用户密码等一系列问题。

①直接返回明文验证码

②返回密文验证码

③拦截替换返回包

 4、验证码与手机号未绑定

一般来说短信验证码仅能使用一次,验证码和手机号未绑定,验证码一段时期内有效,那么就可能出现如下情况:

1、A手机的验证码,B可以拿来用;

2、A手机在一定时间间隔内接到两个验证码,都可以用。

案例一:任意用户密码重置

a、使用自己手机号收取验证码

b、自己的验证码和对方的手机号填上,下一步设置新密码

解决方案:

1.在服务器进行有效验证,手机号和验证码在服务器进行唯一性绑定验证。

2.在服务端限制验证码发送周期,设置时效,限制次数。

5、验证码爆破

短信验证码一般由4位或6位数字组成,若服务端未对验证时间、次数进行限制,则存在被爆破的可能。

短信验证码安全常见逻辑漏洞相关推荐

  1. 5.Spring Security 短信验证码登录

    Spring Security 短信验证码登录 在 Spring Security 添加图形验证码一节中,我们已经实现了基于 Spring Boot + Spring Security 的账号密码登录 ...

  2. Spring Security 短信验证码登录(5)

    在Spring Security添加图形验证码中,我们已经实现了基于Spring Boot + Spring Security的账号密码登录,并集成了图形验证码功能.时下另一种非常常见的网站登录方式为 ...

  3. 如何快速设计短信验证码

    ●●● 短信验证码浅析 什么地方会用到短信验证码 最常见的是各种产品的注册流程.短信验证码可降低非法注册.重复注册率,同时真实的手机号信息也利于产品运营.除注册外,登录,找回密码,开户,支付.更换设备 ...

  4. 短信验证码“最佳实践”

    1.背景 年初,从外地转移阵地到西安,转眼已两个多月.很久不写业务代码了,到了新公司,条件恶劣到前所未有,从需求,设计,架构,实现,实施,测试,bug修复,项目计划制定,项目管理,全他妈我一个人,关键 ...

  5. Spring Boot + Spring-Security实现前后端分离双重身份认证初学者指南(手机号密码JWT + 短信验证码)

    折(mo)腾(yu)了好几天,终于把双重身份认证实现了.(账号密码jwt+短信验证码) 看了很多视频,照葫芦画瓢敲了两三次,遇到各种各样的bug,比如循环依赖(通过@PostConstructor+s ...

  6. Java实现短信验证码最佳实践

    1.背景 2.实现 3.运行效果: 4.源码 5.总结 1.背景 年初,从外地转移阵地到西安,转眼已两个多月.很久不写业务代码了,到了新公司,条件恶劣到前所未有,从需求,设计,架构,实现,实施,测试, ...

  7. 美多商城之短信验证码

    美多商城之短信验证码 1.短信验证码逻辑分析 2.容联云通讯短信平台 3.短信验证码后端逻辑 4.短信验证码前端逻辑 5.补充注册时短信验证逻辑 6.避免频繁发送短信验证码 7.pipeline操作R ...

  8. 如何防止短信验证码接口、登录注册入口被恶意调用攻击?

    目录 前言 1.短信验证码是什么? 2.为什么要对短信验证码进行防护? 3.有哪些常见的防护手段? 4.这些防护手段有没有用呢,到底该如何选择? 5.结语 前言 最近遇到一个关于防止短信验证码被刷的问 ...

  9. Android开发之属于你的短信验证码(二)

    君子欲讷于言而敏于行.-<论语> 最近身体有点不适,才注意到身体真的是最重要的,以后不管我们有多忙,一定要按时休息,坚持跑步,锻炼身体,做些颈椎的操等等,不要让我们挣的钱拿来看病,大家一起 ...

最新文章

  1. SAP MM 公司间STO里交货单PGI之后自动触发内向交货单功能的实现
  2. LeetCode——双指针
  3. 关于 ASP.NET MVC 中的视图生成
  4. spring和jdbctemplate
  5. php微信jsapi支付小结,ThinkPHP接入微信支付 - JSAPI支付
  6. SAP License:2021年了!还不知道 SAP顾问的职业前景?
  7. 光流 速度_科学家研制新型“时空波包”激光束 能够以相同速度穿越不同的介质...
  8. 超级SIM卡 SEID号读取 手机NFC门禁刷卡模块方案
  9. Matlab线性规划实例
  10. memcmp的用法 详讲
  11. 机器学习笔记(四)聚类
  12. 利用手机作为渗透工具的一些思路
  13. mongoDB Ops Manager
  14. Ansys-静力学分析-薄壁圆筒学习心得
  15. 【JavaSE】封装与继承,访问限定符的总结
  16. Arduino和单片机有啥区别?
  17. AMD cpu黑苹果 修改补丁 OpenCore教程
  18. Python3爬虫-04-模拟登录爬取企信宝200页数据
  19. sas入门-笔记2 SAS语言
  20. 涉密网络中使用的计算机,涉密场所中连接互联网的计算机可以安装和使用摄像头。()...

热门文章

  1. Scanner键盘录入
  2. 重拾数据库,常用的数据库语句
  3. Revit二次开发之技能篇(五)———模型轻量化.RVT到JSON实现的测试
  4. 所学所感,贵在坚持。
  5. C++小小计算器(25个功能)
  6. 钉钉、企业微信和友空间,谁是企业级服务的“统一入口”?
  7. WIN8应用商店闪退
  8. 云开发校园微社区微信小程序源码/二手交易/兼职交友微信小程序开源功能介绍
  9. 《手机拍照与视频》那点事
  10. win10 蓝牙耳机 音量太小