Java场景面试题:短信验证码接口被狂刷,怎么办?

简介: 问:Tom老师,请问短信验证码接口被狂刷,搞得服务都快要崩溃了,我该怎么办?答:我想都到云时代了,我想这个问题不应该出现吧?现在,都有非常多的短信服务提供商,应该自带防火墙功能的。

问:Tom老师,请问短信验证码接口被狂刷,搞得服务都快要崩溃了,我该怎么办?

答:我想都到云时代了,我想这个问题不应该出现吧?现在,都有非常多的短信服务提供商,应该自带防火墙功能的。


问:不是,他这个所有的验证都是自己开发的,后台只调用了发送短信的接口,而且还导致短信费用瞬间飙升,(如图)后面把入口强行关闭才及时止损,你看看这个是后台的统计结果。

16487fb5a4e14b74491073873cdebab0.png

答:哦,针对于这种情况的话,给以下6点优化建议吧:


第1点是、限制发送短信的时间间隔,比如,规定每隔60秒后才能再次发送。

后台可以记录给每个手机号码发送短信的时间点,在发送短信之前校验一下看时间间隔是否大于60秒。如果小于60秒则直接拒绝响应,只有大于60秒才调用发送短信的接口。

当然,为了提高用户体验,可以在前端页面加一个60秒倒是的提示,没有达到间隔时间限制,将发送按钮置为禁用状态。这种处理方式虽然非常普遍,但技术稍微好点的程序员完全可以绕过这个限制的,还要继续加强防护措施。


所以,第2点,可以设置手机号码发送次数上限。比如,规定同一个手机号在24小时之内不能够超过5条。如果发送超过5条,可以提示用户第2天再操作,或者申请人工服务。当然,加上这条限制也只能够避免人工手动刷短信而已,对于批量使用不同手机号码来刷短信的机器来说,这种方法也是无可奈何的。


所以,第3点、还需要增加图形验证码校验。比如,同一个IP地址,或者同一个手机号码,连续发送3条以上,就需要输入图形验证码才能触发发送短信的动作。这样,又能拦截一大批恶意请求。但是,如果恶意刷短信的手机号码够多,代理IP也够多,还是有存在风险。


所以,为了继续加强保护,可以增加第4点、控制短信验证码接口的调用频次:比如,说30分钟之内,同一个IP,同一个手机号只发送同一个验证码。也就是说,将第一次请求短信接口的验证码结果缓存到服务器本地,只要是在30分钟之内再次请求,就直接返回缓存中的结果。当然,有些特殊业务场景是不能允许这样设计的,比如,银行转账的短信验证接口。


所以,还可以增加第5点、加上前后端请求唯一性校验,比如给每一次请求加上token参数校验。在前端页面请求发送短信的时候,同时,要携带一个由服务器生成的token参数,服务端对这个token参数进行校验,校验通过之后,再向请求发送短信的接口向用户手机发送短信。


最后,为了避免后台服务过多地处理无效请求,还可以再增加第6点、设置黑名单,比如,将频繁请求的IP地址和手机号码直接加入黑名单,禁止请求服务接口。当然,如果是系统误判,误入黑名单,也可以找人工解禁。


以上就是我针对于短信验证码接口被狂刷的解决方案,各位汤粉如果要有需要补充的,可以分享到评论区。


我是被编程耽误的文艺Tom,如果我的分享对你有帮助,请动动手指分享给更多的人。关注我,面试不再难!


我是被编程耽误的文艺Tom,关注我,面试不再难!


完整版面试资料和答案以及PDF文档 :

9106b97c16b34d06af118b23d081cde9.gif

相关文章
|
9天前
|
安全 架构师 Java
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
27 4
|
3天前
|
消息中间件 存储 Java
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
45岁资深架构师尼恩在其读者群中分享了关于如何提升RocketMQ顺序消费性能的高并发面试题解析。面对10W QPS的高并发场景,尼恩详细讲解了RocketMQ的调优策略,包括专用方案如增加ConsumeQueue数量、优化Topic设计等,以及通用方案如硬件配置(CPU、内存、磁盘、网络)、操作系统调优、Broker配置调整、客户端配置优化、JVM调优和监控与日志分析等方面。通过系统化的梳理,帮助读者在面试中充分展示技术实力,获得面试官的认可。相关真题及答案将收录于《尼恩Java面试宝典PDF》V175版本中,助力求职者提高架构、设计和开发水平。
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
|
1天前
|
监控 Kubernetes Java
阿里面试:5000qps访问一个500ms的接口,如何设计线程池的核心线程数、最大线程数? 需要多少台机器?
本文由40岁老架构师尼恩撰写,针对一线互联网企业的高频面试题“如何确定系统的最佳线程数”进行系统化梳理。文章详细介绍了线程池设计的三个核心步骤:理论预估、压测验证和监控调整,并结合实际案例(5000qps、500ms响应时间、4核8G机器)给出具体参数设置建议。此外,还提供了《尼恩Java面试宝典PDF》等资源,帮助读者提升技术能力,顺利通过大厂面试。关注【技术自由圈】公众号,回复“领电子书”获取更多学习资料。
|
9天前
|
监控 Dubbo Java
Java Dubbo 面试题
Java Dubbo相关基础面试题
|
9天前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题
|
9天前
|
存储 监控 算法
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题
|
9天前
|
SQL 监控 druid
Java Druid 面试题
Java Druid 连接池相关基础面试题
|
9天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题
|
26天前
|
安全 算法 Java
Java CAS原理和应用场景大揭秘:你掌握了吗?
CAS(Compare and Swap)是一种乐观锁机制,通过硬件指令实现原子操作,确保多线程环境下对共享变量的安全访问。它避免了传统互斥锁的性能开销和线程阻塞问题。CAS操作包含三个步骤:获取期望值、比较当前值与期望值是否相等、若相等则更新为新值。CAS广泛应用于高并发场景,如数据库事务、分布式锁、无锁数据结构等,但需注意ABA问题。Java中常用`java.util.concurrent.atomic`包下的类支持CAS操作。
62 2
|
29天前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。

热门文章

最新文章