当前位置:首页 > 科技  > 软件

面试官:如何防止短信盗刷和短信轰炸?

来源: 责编: 时间:2024-02-06 10:13:55 536观看
导读短信盗刷和短信轰炸是项目开发中必须要解决的问题之一,它的优先级不亚于 SQL 注入的问题,同时它也是面试中比较常见的一个经典面试题,今天我们就来看下,如何防止这个问题。1、概念介绍短信盗刷和短信轰炸的概念如下:短信盗

K1u28资讯网——每日最新资讯28at.com

短信盗刷和短信轰炸是项目开发中必须要解决的问题之一,它的优先级不亚于 SQL 注入的问题,同时它也是面试中比较常见的一个经典面试题,今天我们就来看下,如何防止这个问题。K1u28资讯网——每日最新资讯28at.com

1、概念介绍

短信盗刷和短信轰炸的概念如下:K1u28资讯网——每日最新资讯28at.com

  • 短信盗刷是指使用某种技术手段,伪造大量手机号调用业务系统,盗取并发送大量短信的问题。这样会导致短信系统欠费,不能正常发送短信,同时也给业务系统方,带来了一定的经济损失和不必要的麻烦。
  • 短信轰炸是指攻击者利用某种技术手段,连续、大量地向目标手机号码发送短信,以达到骚扰、干扰或消耗目标用户的时间、流量与精力的目的。这种行为可能会对受害者造成骚扰、通信中断和手机电量消耗过快等问题。

2、解决方案

短信盗刷和短信轰炸属于一类问题,可以一起解决。但这类问题的解决,不能依靠某一种解决方案,而是多种解决方案共同作用,来预防此类问题的发生。K1u28资讯网——每日最新资讯28at.com

这类问题的综合解决方案有以下几个:K1u28资讯网——每日最新资讯28at.com

  • 添加图形验证码:用户发送短信前,需要先输入正确的图形验证码,或拖动验证码等验证,验证通过之后,才能正常发送短信验证码。因为图形验证码的破解难度非常大,所以就避免了自动发送短信程序的执行。
  • 添加 IP 限制:对请求 IP 的发送次数进行限制,避免短信盗刷和短信轰炸的问题。例如,每个 IP 每天只能发送 10 条短信。
  • 开启 IP 黑名单:限制某个 IP 短信发送功能,从而禁止自动发送短信程序的执行。
  • 限制发送频次:一个手机号不能一直不停的发送验证码(即使更换了多个 IP 也不行),设置一个手机号,每分钟内只能发送 1 次验证码;一小时之内,只能发送 5 次验证码;一天之内,只能发送 10 次验证码。
  • 开启短信提供商的防控和报警功能:几乎所有的短信提供商都提供了,异常短信的防控和提醒功能,开启这些保护措施,可以尽可能的避免短信盗刷的问题。

具体实现如下。K1u28资讯网——每日最新资讯28at.com

3、具体解决方案

(1)添加图形验证码

图形验证码的执行流程如下:K1u28资讯网——每日最新资讯28at.com

当用户点击“发送短信验证码”的时候,前端程序请求后端生成图形验证码,后端程序生成图形验证码的功能,可以借助 Hutool 框架来生成,它的核心实现代码如下:K1u28资讯网——每日最新资讯28at.com

@RequestMapping("/getcaptcha")public AjaxResult getCaptcha(){    // 1.生成验证码到本地    // 定义图形验证码的长和宽    LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(128, 50);    String uuid = UUID.randomUUID().toString().replace("-","");    // 图形验证码写出,可以写出到文件,也可以写出到流    lineCaptcha.write(imagepath+uuid+".png");    // url 地址    String url = "/image/"+uuid+".png";    // 将验证码存储到 redis    redisTemplate.opsForValue().set(uuid,lineCaptcha.getCode());    HashMap<String,String> result = new HashMap<>();    result.put("codeurl",url);    result.put("codekey",uuid);    return AjaxResult.succ(result);}

上述执行代码中有两个关键操作:第一,生成图形验证码,并返回给前端程序;第二,将此图形验证的标识(ID)和正确的验证码保存到 Redis,方便后续验证。K1u28资讯网——每日最新资讯28at.com

前端用户拿到图形验证码之后,输入图形验证码,请求后端程序验证,并发送短信验证码。K1u28资讯网——每日最新资讯28at.com

后端程序拿到(图形)验证码之后,先验证(图形)验证码的正确性.如果正确,则发送短信验证码,否则,将不执行后续流程并返回执行失败给前端,核心实现代码如下:K1u28资讯网——每日最新资讯28at.com

// redis 里面 key 对应的真实的验证码String redisCodeValue = (String) redisTemplate.opsForValue().get(user.getCodeKey());// 验证 redis 中的验证码和用户输入的验证码是否一致if (!StringUtils.hasLength(redisCodeValue) || !redisCodeValue.equals(user.getCheckCode())) {    // 验证码不正确    return AjaxResult.fail(-1, "验证码错误");}// 清除 redis 中的验证码redisTemplate.opsForValue().set(userInfoVO.getCodeKey(), "");// 请求短信 API 发送短信业务......

(2)添加 IP 限制

IP 限制可以在网关层 Spring Cloud Gateway 中实现,在 Gateway 中使用全局过滤器来完成 IP 限制,核心实现代码如下:K1u28资讯网——每日最新资讯28at.com

@Componentpublic class IpFilter implements GlobalFilter {    @Override    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {        // 获取请求 IP        String ip = exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();        Long count = redisTemplate.opsForValue().increment(ip, 1); // 累加值        if(count >= 20){ // 大于最大执行次数            redisTemplate.opsForValue().decrement(ip, 1); // 变回原来的值            // 终止执行            response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);            return response.setComplete();        }        redisTemplate.expire(ip, 1, TimeUnit.DAYS); // 设置过期时间        // 执行成功,继续执行后续流程        return chain.filter(exchange);    }}

其中,访问次数使用 Redis 来存储。K1u28资讯网——每日最新资讯28at.com

(3)开启 IP 黑名单

IP 黑名单可以在网管层面通过代码实现,也可以通过短信提供商提供的 IP 黑名单来实现。K1u28资讯网——每日最新资讯28at.com

例如,阿里云短信提供的 IP 黑名单机制,如下图所示:K1u28资讯网——每日最新资讯28at.com

K1u28资讯网——每日最新资讯28at.com

K1u28资讯网——每日最新资讯28at.com

通过以上设置之后,我们就可以将监控中有问题的 IP 设置为黑名单,此时 IP 黑名单中的 IP 就不能调用短信的发送功能了。K1u28资讯网——每日最新资讯28at.com

PS:网关层面实现 IP 黑名单,可以参考添加 IP 限制的代码进行改造。K1u28资讯网——每日最新资讯28at.com

(4)限制验证码的发送频次

验证码的发送频次,可以通过网关或短信提供商来解决。以阿里云短信为例,它可以针对每个手机号设置每分钟、每小时、每天的短信最大发送数,如下图所示:K1u28资讯网——每日最新资讯28at.com

K1u28资讯网——每日最新资讯28at.com

当然,这个值也可以人为修改,但阿里云短信每天单个手机号最多支持发送 40 条短信。K1u28资讯网——每日最新资讯28at.com

(5)开启短信提供商的防控和报警功能

短信提供商通常会提供防盗、防刷的机制。例如,阿里短信它可以设置短信发送总量阈值报警、套餐余量提醒、每日/每月发送短信数量限制等功能,如下图所示:K1u28资讯网——每日最新资讯28at.com

K1u28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-74675-0.html面试官:如何防止短信盗刷和短信轰炸?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: DartVM GC 深度剖析

下一篇: 关于 Next.js ,你不知道的事情

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 国行版三星Galaxy Z Fold5/Z Flip5发布 售价7499元起

    2023年8月3日,三星电子举行Galaxy新品中国发布会,正式在国内推出了新一代折叠屏智能手机三星Galaxy Z Fold5与Galaxy Z Flip5,以及三星Galaxy Tab S9
  • iQOO 11S屏幕细节公布:首发三星2K E6全感屏 安卓最好的直屏手机

    日前iQOO手机官方宣布,新一代电竞旗舰iQOO 11S将会在7月4日19:00正式与大家见面。随着发布时间的日益临近,官方关于该机的预热也更加密集,截至目前已
Top