百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

短信接口防盗刷解决方案(短信接口防止恶意调用)

cac55 2025-03-19 10:43 10 浏览 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

相关推荐

unetbootin中文版:能够将Linux系统装进U盘的U盘启动盘制作工具

unetbootin中文版是一款能够将Linux操作系统装进U盘或移动硬盘的U盘启动盘制作工具,制作好的U盘启动盘能够用于电脑的维护和系统还原等操作,使用起来非常地不错。该软件不会基于操作系统使用特定...

实用之选,实用之改:DELL 戴尔 灵越14CR-4528B 小改作业

昨天发布了一篇三脚架,今天有时间也写写早就准备写的DELL戴尔灵越14CR-4528B作业吧。话说上个笔记本还是2006年底买的华硕A6JE,电脑挺不错的,在家上上网也够用了,就是转轴设计缺陷,容...

教你如何制作一个启动U盘,从此电脑不用找专人做系统

在电脑使用中,老是遇到卡顿,蓝屏,重启等很多故障,大多都是因为自己日常使用习惯而造成的,很多用户在下载软件的时候不知不觉中都被安装许多乱七八糟的软件,当电脑乱七八糟的东西过多的时候我们就重新来装一个系...

8、Deepin操作系统启动盘(系统盘)制作

1、在Deepin官网https://www.deepin.org/zh/download/下载原版Deepin操作系统2、同时在Deepin官网https://www.deepin.org/zh/d...

电脑死机怎么办,电脑如何使用U盘重装系统

电脑死机是我们最常遇到的系统故障,遇到死机时通常重启就可以解决,不过系统损坏引起的死机就只能重装系统,那么电脑死机如何重装系统呢?下面来看看电脑死机怎么办如何使用U盘重装系统_小白一键重装系统官网。 ...

bootmgr is compressed无法启动系统

bootmgriscompressedPressCtrlAltDeltorestart,电脑启动后无法正常开机出现了这样的字样,就是说明你的C盘驱动被压缩解决方法:1、使用系统光盘或者...

新手教程!如何分辨BIOS启动列表(菜单)中的各种启动项

在BIOS启动菜单中识别各类启动项,是新手安装系统或调整启动顺序的必备技能。下面用最直观的方式,为你梳理常见启动项及其含义,帮助你快速上手:一、传统存储设备启动项1.Floppy(软盘驱动器)对应...

带回家的MINI客厅电脑,自学成才,分享U盘装系统教程

刚好老家新装修了房子,客厅买了个大电视,本来是想在客厅弄台主机,接电视玩,大屏幕玩的才爽,但是台式机箱太占地方了。网上逛了一圈,发现有专门的客厅电脑,就搞了一个,外形不错,放客厅很有档次,主要是主机太...

电脑基础知识:BIOS简介及其与Windows操作系统的关系

什么是BIOS?BIOS,全称BasicInputOutputSystem,即“基本输入输出系统”,是一段固化在电脑主板芯片上的底层固件程序。它类似于一款极简化的操作系统,负责电脑开机时的硬件初...

win 7 系统注册表文件丢失或损坏,求不重做系统的解决办法!

粉丝问题解答:win7系统注册表文件丢失或损坏,求不重做系统的解决办法!解决方法:你只需要有启动盘即可,不需要其他的。之所以要求启动盘,是因为下面要对系统文件进行还原覆盖,所以不能用原系统启动。用...

UEFI怎么装Win7 小编呕血解难点!

自从广开言路之后,小编就被你们害苦了,这不,一条评论又让小编彻夜难眠。另外某些小伙伴坐不上沙发后提出要上墙的需求,其实呢只要大家提出的问题具有普遍性、有难度、而且适合小编做微信内容的话,都有机会将你们...

固态攻坚战——ASUS 华硕k45v换固态、拆机清灰教程

作者:蘑菇爱上我现在固态白菜价固态对于电脑体验的提升还是很大的对于固态存储芯片的问题没什么好说的有钱mlc,没钱tlc,不需要考虑什么寿命的问题,我用了一年多的m600,写入才3TB品牌很重要,主控...

MBR启动报错?Win10不重装一样能好!

Win10一遇到启动故障,很多小伙伴可能就会抓瞎,这可怎么弄,我不会修复啊!其实大可不必惊慌,就像这种最常见的Winload启动错误,多半都是MBR分区表丢失造成的(UEFI分区模式的几乎没有这种故障...

从零开始:硬盘手动装系统全攻略

手动安装操作系统是计算机技术必备的基本技能。对于初学者来说,可能会感到有些挑战。但通过掌握硬盘手动装系统方法,你可以亲身体验整个安装过程,进而更好地理解操作系统的工作原理。本文将详细介绍硬盘手动装系统...

电脑开机后显示File:BCD错误0xc000000f

WIN7\WIN8\WIN101、一个win864位PE。这个64位PE的相关文件,路径在boot\BOOT.WIM实机测试,开机后显示File:\EFI\Microsoft\Boot\BCD,...

取消回复欢迎 发表评论: