簡訊介面防盜刷解決方案

来源:https://www.cnblogs.com/javazhishitupu/archive/2022/04/12/16134378.html
-Advertisement-
Play Games

一、序言 在Web開發中,總有一些介面需要暴露在用戶認證前訪問,簡訊發送介面特別是簡訊驗證碼註冊介面便是其中典型的一類,這類介面具有如下特點: 流量在用戶認證之前 流量在用戶認證之前,意味著無法獲取用戶ID等唯一標識符信息對流量限流 手機號未知 手機號未知意味著無法對待發送簡訊的手機號做精準檢測,判 ...


一、序言

在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限流。

喜歡本文就【♥️推薦♥️】一下,激勵我持續創作。這個Github同樣精彩,收到您的star我會很激動。本文歸檔在專題博客,視頻講解在B站


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 相信在座各位應該沒有幾個不看小說的吧,嘿嘿~ 一般來說咱們書荒的時候怎麼辦?自然是去起某點排行榜先找到小說名字,然後再找度娘一搜,哎 ,筆趣閣就出來答案了,美滋滋~ 但是那多麻煩,咱們直接用python,直接全部下載下來慢慢看不就好了~ 小孩子才做選擇,成年人選擇都要… 好了,不啰嗦了,等下大家要罵 ...
  • google 出品的依賴註入庫 wire:https://github.com/google/wire 什麼是依賴註入 依賴註入 ,英文全名是 dependency injection,簡寫為 DI。 百科解釋: 依賴註入是指程式運行過程中,如果需要調用另一個對象協助時,無須在代碼中創建被調用者,而 ...
  • 目錄 一.簡介 二.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 OpenGL (ES) 學習路 ...
  • 前言 最近有人對自動上傳與發佈很感興趣,都私下找我說了好幾次了。今天,必須把他安排,必須實力寵粉。 “本篇依次介紹目前主流的短視頻平臺(抖音、快手、B站、小紅書、微視、百度好看視頻、西瓜視頻、微信視頻號、搜狐視 頻、一點號、大風號、趣頭條等)的短視頻自動發佈,希望幫助大家更方便、高效的來進行自媒體的 ...
  • LeetCode_141:https://leetcode-cn.com/problems/linked-list-cycle/ 給你一個鏈表的頭節點 head ,判斷鏈表中是否有環。 如果鏈表中有某個節點,可以通過連續跟蹤 next 指針再次到達,則鏈表中存在環。 如果鏈表中存在環 ,則返回 tr ...
  • 開門見山。 這篇文章,教大家用Python實現常用的假設檢驗! 服從什麼分佈,就用什麼區間估計方式,也就就用什麼檢驗! 比如:兩個樣本方差比服從F分佈,區間估計就採用F分佈計算臨界值(從而得出置信區間),最終採用F檢驗。 建設檢驗的基本步驟: 前言 假設檢驗用到的Python工具包 •Statsmo ...
  • 最近發現一個視頻網站,準備去爬取得時候,前面很順利 利用fiddler抓包獲取網站的post數據loads為python字典數據,分析數據就能發現每個視頻的連接地址就在其中 發現這些都是m3u8文件流的形式並且加密的 key 最後實現代碼如下: 下載下來後用暴風音影可以播放,其他播放器要用格式工廠轉 ...
  • hello大家好,我是小樓。 最近踩了個DNS解析的小坑,雖然問題解決了,但排查過程比較曲折,最後還是有一點沒有想通,整個過程分享給大家。 背景 最近負責的服務要置換機器。置換機器可能很多小伙伴不知道是幹啥,因為大家平時接觸不到,我簡單解釋一下什麼是機器置換以及為什麼需要機器置換。 機器置換通俗地講 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...