短信接口防盗刷解决方案(短信接口防止恶意调用)
cac55 2025-03-19 10:43 12 浏览 0 评论
一、序言
在Web开发中,总有一些接口需要暴露在用户认证前访问,短信发送接口特别是短信验证码注册接口便是其中典型的一类,这类接口具有如下特点:
- 流量在用户认证之前
流量在用户认证之前,意味着无法获取用户ID等唯一标识符信息对流量限流
- 手机号未知
手机号未知意味着无法对待发送短信的手机号做精准检测,判断是否是合法的手机号。通过正则表达式判断手机号连号过多,容易滋生短信盗刷。
本文将重点聚焦接口的防盗刷实践。
二、盗刷流量
在解决防盗刷之前先认识盗刷流量的特点和防盗刷的目标。
(一)防盗刷的目标
1、减少盗刷的总量
如果能将盗刷的频率控制在60秒之外,那么单日盗刷的最大数量为24*60=1440。假如系统入侵者发现请求频率间隔在60秒以上,那么可自动劝退入侵者,原因是投入与产出不匹配。
实际上盗刷流量以秒级甚至毫秒级刷新,对系统造成明显的损害。
2、回避周期性盗刷
周期性盗刷隐匿性更高,对系统有持续破坏能力,积少成多,不易察觉,相比于单次爆破性盗刷,周期性盗刷的危害可能会更大。
对于重要的接口,可考虑动态URL或者给参数增加时间戳签名,避免静态接口被暴露出去。
3、减小对正常用户的影响
防盗刷的重要目标是避免因提高安全等级而误伤正常用户,即使对正常用户有影响,也要减少相应的比率。
(二)盗刷流量的特点
盗刷与正常用户流量有明显区别,尽管盗刷可以模拟正常用户,但是还是通用性区别。
正常用户访问是随机的,失败重试的次数有限并且也是随机的。盗刷流量是周期性的,并且间隔很小。
正常用户是通过浏览器或者APP间接的产生请求流量,盗刷通过代码直接发送HTTP请求。
三、可行性方案
下面通过逐步探究的方式,寻找合适的防盗刷方案。
(一)无安全防护
如果说重要的接口无安全防护措施,那么过于粗心大意。仅靠短信运营商提供的限流和预警方案不能满足短信防盗刷的需求,本质原因是手机号可以合法的模拟,短信运营商不管是正常手机号、停机号、注销号还是尚未投入使用手机号,均会响应发送短信的指令,哪怕是空号发送不成功也会计数。实际上盗刷使用的空号正是接口盗刷的典型特征。
仅靠短信运营商提供的限流和预警方案不能满足短信防盗刷的需求,尽管可以针对单个手机号定制发送短信限额,按小时、按天可定制发送总额,依然不满足短信防盗刷的目标。当触发限流时,正常用户流量同样被限流,对于短信注册来说新增正常用户受影响。如果恶意破坏者连多日耗尽限额短信资源,对正常用户的使用影响很大。
(二)图片验证码
在无防护措施的基础上增加图片验证码,有验证码的保护,短信接口相对安全许多。
短信验证码尽管能够有效保护短信接口防盗刷,但是不能够保护自己被盗刷。盗刷流量恶意刷新图片验证码接口,给服务器CPU造成极大的负载:图片验证码服务与业务耦合,则业务可能响应缓慢;图片验证码服务独立部署,隔离了对业务的影响,但是图片验证码服务器CPU依旧可能过载,正常用户依然收到影响。
Web系统使用图片验证码正逐渐减少,原因是引入了图片验证码保护了短信接口,却无法保护自己。
(三)基于IP限流
上述两种方法存在明显的缺陷,实施落地时几乎不使用,通过基于IP限流对无安全防护方案进行升级改造。基于IP地址,每60秒允许发送一条短信(不关联手机号),通过后端强制限流,能够大幅减少短信接口被盗刷的数量。
基于IP限流回避了盗刷模拟手机号的影响,使用IP地址一刀切,稳妥的保证了短信接口的安全。
IP限流有个潜在隐患是如果恶意攻击者与正常用户复用同一个公网IP出口,那么正常用户可能会收到影响,不过这种情况影响范围有限且可控。
恶意盗刷通过代理IP地址仍然能够破解IP限流,只不过增加了破坏者的成本。
UCode CMS内置分布式IP限流的实现,可快速集成到项目中,请访问开源项目中说明文档获取更多内容。
(四)动态请求
通过上述三种方案并没有找到令人满意的防盗刷方案,下面在IP限流的基础上继续打补丁,升级到动态请求。
动态请求的核心思想是将短信验证码接口动态化,既可以接口URL动态化,也可以是参数动态化。下面介绍一种基于时间戳签名参数的方式,实现动态请求。
1、签名参数生成
前后端约定签名参数生成算法,此算法应当保密。
比如:手机号=18612345678,则key=MD5(手机号 + 当前时间/分钟),这里使用60秒的缓冲时间,也可以约定3分钟或者5分钟。
前后端都用这种方式生成key,前端页面通过js脚本生成“签名”,服务端“验签”。
需要注意的是:时间校验要留buffer,客户机时间与服务器时间并不完全相同。
同一个签名参数超过缓冲时间在后端无法实现验签,因此盗刷在不知道签名算法的前提下,盗刷流量有时间维度限制,解决了周期性盗刷的问题。
2、签名算法安全性
签名算法在后端是安全的,出开发人员外,几乎无泄漏的可能。下面着重讨论签名算法在前端的安全性,以Web端和APP端讨论。
(1)Web端
Web端通过JS实现签名算法,由于可通过浏览器直接查看JS,有泄露算法的可能。不过目前大多数JS都是通过压缩处理的,无法直接查看JS的详细内容,如果前端做一些伪装,破坏者找到签名算法有一定难度。
(2)APP端
相比于Web端,APP端的安全性略高,签名拳法封装在APP应用程序中,除非通过反编译手段,无法得知签名算法的详情。
对于非HTTPS流量,可通过抓包程序获取短信接口的URL和参数,在不知道签名算法的前提下,仍不能周期性的盗刷。
四、小结
上述可行性方案逐步升级,能够实现重要接口的防盗刷需求。
(一)防盗刷建议
对于重要接口的防盗刷,除了使用上述方案外,建议遵循如下要点:
1、使用POST请求
尽量使用POST请求方式,增加盗刷者的尝试成本。
2、使用HTTPS
HTTPS在Web端形同虚设,在APP端有较为很好的保护作用,盗刷者通过抓包工具无法直接获取接口的详情信息,有效的保护了接口。
3、周期性修改接口
随着项目的迭代升级,周期性的随机变更重点接口的请求地址,前后端同步更新。
(二)补充说明
上述可行性讨论方案适用于与短信注册类似的接口。
1、短信登录接口
短信登录在IP限流的基础上增加手机号BitMap检验,如果当前客户端访问IP限流正常,并且当前请求手机号已经注册,则发送短信。
短信登录接口无必要使用复杂的动态请求的方式,原因是已经默认了当前请求手机号存在数据库中,如果不存在那么便是错误请求,快速响应即可。
UCode CMS内置分布式BitMap的实现,可快速集成到项目中,请访问开源项目中说明文档获取更多内容。
2、已认证接口
对于已经经过登录认证的接口,可使用用户ID限流,直接在无安全防护的基础上使用用户ID限流。
作者:Java知识图谱
链接:
https://www.cnblogs.com/javazhishitupu/p/16134378.html
相关推荐
- Mac电脑强制删除任何软件方法-含自启动应用
-
对于打工者来说,进入企业上班使用的电脑大概率是会被监控起来,比如各种流行的数据防泄漏DLP,奇安信天擎,甚至360安全卫士,这些安全软件你想卸载是非常困难的,甚至卸载后它自己又安装回来了,并且还在你不...
- Linux基础知识 | 文件与目录大全讲解
-
1.linux文件权限与目录配置1.文件属性Linux一般将文件可存取的身份分为三个类别,分别是owner/group/others,且三种身份各read/write/execute等权限文...
- 文件保护不妥协:2025 年 10 款顶级加密工具推荐
-
数据安全无小事,2025年这10款加密工具凭借独特功能脱颖而出,从个人到企业场景全覆盖,第一款为Ping32,其余为国外英文软件。1.Ping32企业级加密核心工具,支持200+文件格...
- 省心省力 一个软件搞定系统维护_省心安装在哪里能找到
-
◆系统类似于我们居住的房间,需要经常打理才能保持清洁、高效。虽然它本身也自带一些清理和优化的工具,但借助于好用的第三方工具来执行这方面的任务,会更让人省心省力。下面笔者就为大家介绍一款集多项功能于一身...
- JAVA程序员常用的几个工具类_java程序员一般用什么软件写程序
-
好的工具做起事来常常事半功倍,下面介绍几个开发中常用到的工具类,收藏一下,也许后面真的会用到。字符串处理:org.apache.commons.lang.StringUtilsisBlank(Char...
- 手工解决Windows10的若干难题_windows10系统卡顿怎么解决
-
【电脑报在线】很多朋友已经开始使用Win10,估计还只是测试版本的原因,使用过程中难免会出现一些问题,这里介绍解决一些解决难题的技巧。技巧1:让ProjectSpartan“重归正途”从10074...
- System32文件夹千万不能删除,看完这篇你就知道为什么了
-
C:\Windows\System32目录是Windows操作系统的关键部分,重要的系统文件存储在该目录中。网上的一些恶作剧者可能会告诉你删除它,但你不应该尝试去操作,如果你尝试的话,我们会告诉你会发...
- Windows.old 文件夹:系统备份的解析与安全删除指南
-
Windows.old是Windows系统升级(如Win10升Win11)或重装时,系统自动在C盘创建的备份文件夹,其核心作用是保留旧系统的文件、程序与配置,为“回退旧系统”提供保...
- 遇到疑难杂症?Windows 10回收站问题巧解决
-
回收站是Windows10的一个重要组件。然而,我们在使用过程中,可能会遇到一些问题。例如,不论回收站里有没有文件,都显示同一个图标,让人无法判别回收站的空和满的真实情况;没有了像Windows7...
- 卸载软件怎么彻底删掉?简单几个步骤彻底卸载,电脑小白看过来
-
日常工作学习生活中,我们需要在安装一些软件程序,但随着软件的更新迭代速度,很多时候我们需要重新下载安装新的程序,这时就需要将旧的一些软件程序进行卸载。但是卸载软件虽然很简单,但是很多小伙伴们表示卸载不...
- 用不上就删!如何完全卸载OneDrive?
-
作为Windows10自带的云盘,OneDrive为资料的自动备份和同步提供了方便。然而,从隐私或其他方面考虑,有些人不愿意使用OneDrive。但Windows10本身不提供直接卸载OneDri...
- 【Linux知识】Linux下快速删除大量文件/文件夹方法
-
在Linux下,如果需要快速删除大量文件或文件夹,可以使用如下方法:使用rm命令删除文件:可以使用rm命令删除文件,例如:rm-rf/path/to/directory/*这个命令会递...
- 清理系统不用第三方工具_清理系统垃圾用什么软件
-
清理优化系统一定要借助于优化工具吗?其实,手动优化系统也没有那么神秘,掌握了方法和技巧,系统清理也是一件简单和随心的事。一方面要为每一个可能产生累赘的文件找到清理的方法,另一方面要寻找能够提高工作效率...
- 系统小技巧:软件卸载不了?这里办法多
-
在正常情况下,我们都是通过软件程序组中的卸载图标,或利用控制面板中的“程序和功能”模块来卸载软件的。但有时,我们也会发现利用卸载图标无法卸载软件或者卸载图标干脆丢失找不到了,甚至控制面板中卸载软件的功...
- 麒麟系统无法删除文件夹_麒麟系统删除文件权限不够
-
删除文件夹方法例:sudorm-rf文件夹名称。删除文件方法例:sudorm-r文件名包括扩展名。如果没有权限,给文件夹加一下权限再删。加最高权限chmod775文件名加可执行权限...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)