成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何防止短信盜刷和短信轟炸?

開發 前端
本文所描述的問題只是日常開發中遇到的問題之一,但是除了本文提供的問題之外,你還遇到了哪些記憶深刻的問題呢?

短信盜刷和短信轟炸是項目開發中必須要解決的問題之一,它的優先級不亞于 SQL 注入的問題,同時它也是面試中比較常見的一個經典面試題,今天我們就來看下,如何防止這個問題。

1.概念介紹

短信盜刷和短信轟炸的概念如下:

  • 短信盜刷是指使用某種技術手段,偽造大量手機號調用業務系統,盜取并發送大量短信的問題。這樣會導致短信系統欠費,不能正常發送短信,同時也給業務系統方,帶來了一定的經濟損失和不必要的麻煩。
  • 短信轟炸是指攻擊者利用某種技術手段,連續、大量地向目標手機號碼發送短信,以達到騷擾、干擾或消耗目標用戶的時間、流量與精力的目的。這種行為可能會對受害者造成騷擾、通信中斷和手機電量消耗過快等問題。

2.解決方案

短信盜刷和短信轟炸屬于一類問題,可以一起解決。但這類問題的解決,不能依靠某一種解決方案,而是多種解決方案共同作用,來預防此類問題的發生。

這類問題的綜合解決方案有以下幾個:

  • 添加圖形驗證碼:用戶發送短信前,需要先輸入正確的圖形驗證碼,或拖動驗證碼等驗證,驗證通過之后,才能正常發送短信驗證碼。因為圖形驗證碼的破解難度非常大,所以就避免了自動發送短信程序的執行。
  • 添加 IP 限制:對請求 IP 的發送次數進行限制,避免短信盜刷和短信轟炸的問題。例如,每個 IP 每天只能發送 10 條短信。
  • 開啟 IP 黑名單:限制某個 IP 短信發送功能,從而禁止自動發送短信程序的執行。
  • 限制發送頻次:一個手機號不能一直不停的發送驗證碼(即使更換了多個 IP 也不行),設置一個手機號,每分鐘內只能發送 1 次驗證碼;一小時之內,只能發送 5 次驗證碼;一天之內,只能發送 10 次驗證碼。
  • 開啟短信提供商的防控和報警功能:幾乎所有的短信提供商都提供了,異常短信的防控和提醒功能,開啟這些保護措施,可以盡可能的避免短信盜刷的問題。

具體實現如下。

3.具體解決方案

3.1 添加圖形驗證碼

圖形驗證碼的執行流程如下:

  • 當用戶點擊“發送短信驗證碼”的時候,前端程序請求后端生成圖形驗證碼,后端程序生成圖形驗證碼的功能,可以借助 Hutool 框架來生成,它的核心實現代碼如下:
@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,方便后續驗證。

  • 前端用戶拿到圖形驗證碼之后,輸入圖形驗證碼,請求后端程序驗證,并發送短信驗證碼。
  • 后端程序拿到(圖形)驗證碼之后,先驗證(圖形)驗證碼的正確性.如果正確,則發送短信驗證碼,否則,將不執行后續流程并返回執行失敗給前端,核心實現代碼如下:
// 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 發送短信業務......

3.2 添加 IP 限制

IP 限制可以在網關層 Spring Cloud Gateway 中實現,在 Gateway 中使用全局過濾器來完成 IP 限制,核心實現代碼如下:

@Component
public 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 來存儲。

3.3 開啟 IP 黑名單

IP 黑名單可以在網管層面通過代碼實現,也可以通過短信提供商提供的 IP 黑名單來實現。

例如,阿里云短信提供的 IP 黑名單機制,如下圖所示:

圖片圖片

圖片圖片

通過以上設置之后,我們就可以將監控中有問題的 IP 設置為黑名單,此時 IP 黑名單中的 IP 就不能調用短信的發送功能了。

PS:網關層面實現 IP 黑名單,可以參考添加 IP 限制的代碼進行改造。

3.4 限制驗證碼的發送頻次

驗證碼的發送頻次,可以通過網關或短信提供商來解決。以阿里云短信為例,它可以針對每個手機號設置每分鐘、每小時、每天的短信最大發送數,如下圖所示:

圖片圖片


當然,這個值也可以人為修改,但阿里云短信每天單個手機號最多支持發送 40 條短信。

3.5 開啟短信提供商的防控和報警功能

短信提供商通常會提供防盜、防刷的機制。例如,阿里短信它可以設置短信發送總量閾值報警、套餐余量提醒、每日/每月發送短信數量限制等功能,如下圖所示:

圖片圖片

課后思考

本文所描述的問題只是日常開發中遇到的問題之一,但是除了本文提供的問題之外,你還遇到了哪些記憶深刻的問題呢?你又是如何解決的呢?

責任編輯:武曉燕 來源: 磊哥和Java
相關推薦

2024-02-05 16:38:00

2014-03-12 16:09:21

Zabbix短信報警

2017-05-31 14:55:19

2023-03-07 10:53:33

短信

2020-06-22 07:55:28

接口爬蟲

2024-11-27 00:20:32

2017-03-10 09:11:49

信用卡盜刷機器學習

2014-10-14 12:57:18

短信蠕蟲

2021-07-26 12:26:20

個人信息保護工業和信息化部規定

2024-02-19 00:00:00

接口圖形驗證碼

2014-11-13 14:29:32

2023-09-08 09:29:58

sender?自定義Group

2011-12-30 21:53:41

應用

2014-08-11 16:07:00

短信木馬

2010-09-06 09:47:30

360手機衛士垃圾短信360安全中心

2023-11-08 08:31:37

2017-12-06 13:14:19

機器學習語義識別垃圾短信

2014-08-03 18:29:13

2017-12-06 14:47:41

iOS 11短信機器學習

2011-12-25 21:00:30

iPhone
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产女人叫床高潮大片免费 | 福利一区二区 | 精品久久伊人 | a国产视频 | 一区二区成人 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 国产激情一区二区三区 | 天天操 天天操 | 岛国av免费在线观看 | 九九九久久国产免费 | 伊人爽 | 日本天天操| 精品国产免费人成在线观看 | 欧美一区二区三区在线观看视频 | 久久久成人精品 | 亚洲精品二三区 | 国产一区二区三区 | cao视频| 中文字幕一区二区三区四区五区 | 日韩中文字幕一区二区 | 欧美高清视频一区 | 国产成在线观看免费视频 | 国产精品久久久久9999鸭 | 夜夜爽99久久国产综合精品女不卡 | 日韩高清国产一区在线 | 日韩国产高清在线观看 | 中文字幕成人在线 | h片在线观看网站 | av国产精品 | 中文字幕在线不卡播放 | 天天操欧美 | 欧美精品欧美精品系列 | 久久综合色综合 | 99精品免费 | 81精品国产乱码久久久久久 | 精品一区二区av | 色偷偷噜噜噜亚洲男人 | 久久久久久国产精品 | 国产福利在线 | 久久免费小视频 | 性做久久久久久免费观看欧美 |