實際問題系列:公司短信接口被攻擊了,怎麼防止

這是我參與8月更文挑戰的第3天,活動詳情查看:8月更文挑戰前端

有了QQ,微信以後短信的做用對我的好像沒有什麼特別的用處,平時朋友間的溝通都是經過微信(也有QQ),漸漸淡化了短信的用處。可是做爲開發咱們仍是會接觸短信平臺的。java

短信如今的用處:緩存

  •       網站和app的安全驗證(註冊,登錄,修改密碼等)
  •       廣告推送騷擾
  •       生日祝福(來自理財,保險,銀行)
  •       女友生氣拉黑微信/電話以後的道歉途徑
  •       還有自信賣A貨的(感興趣的看文末)
  •       .......

目前阿里雲,百度雲,騰訊雲都有本身的短信平臺,並且咱們的系統中也都集成了。 曾經咱們正式環境系統配置的是其中一家的短信平臺,已經持續運行使用2年了。安全

在最近使用期間出現了一次被惡意發送好幾萬條短信(最好在平臺上開啓每日最大限制,咱們沒開)。微信

咱們的部分短信接口是public的(忘記密碼和註冊功能),不須要受權便可直接API調用,並且咱們系統中也是作了部分頻控的,可是沒有作IP的限制。markdown

一個短信功能究竟該如何開發才能安全呢。網絡

一句話:互聯網上沒有真正的安全,安全是相對的,就是儘量提高攻擊者的代價。app

新手:只考慮能不能發送,研究短信平臺接口文檔,寫代碼調試,最終能夠正常發送短信。寫業務相關代碼,相關信息存儲緩存,等待驗證,一個短信功能開發完成。機器學習

老手:研究短信平臺接口文檔,寫代碼調試,能夠正常發送短信。繼續封裝短信接口,增長頻控 例如短信發送間隔時間驗證碼過時時間同一帳號發送限制次數限制的間隔時間 等。配置以下post

captcha:
    sms:
      # 短信驗證碼過時時間(分)
      expire: ${SMS_EXPIRE:5}
      # 驗證碼發送間隔時間(秒)
      interval: ${SMS_INTERVAL:60}
      # 同一個帳號發送次數限制
      limit-time: ${SMS_LIMIT_TIME:10}
      # 次數限制的間隔時間(時)
      limit-interval: ${SMS_LIMIT_INTERVAL:12}
複製代碼

還有會增長接口調用IP限制(防止同一個IP頻繁調用接口),而後寫業務代碼,完成開發。

還能夠過濾一些無效的短信發送,如:

   1. 手機號校驗:手機號不合格的不發送,可使用google的組件檢查,國內外手機號均可以校驗。

<dependency>
    <groupId>com.googlecode.libphonenumber</groupId>
    <artifactId>libphonenumber</artifactId>
    <version>8.12.6</version>
</dependency>
複製代碼

   2. 註冊功能:系統中已存在的不發送,在發送短信的時候校驗手機號是否已註冊,而不是真正註冊提交數據的時候再校驗。

   3. 修改密碼:系統中不存在的不發送,在發送驗證碼的時候校驗下手機號是不是系統中的用戶。

以上的方案只是對同一個手機號和IP作了頻控,可是若是攻擊者使用不斷更換IP給不一樣的手機號發送短信,那麼就沒法避免短信的浪費和用戶的騷擾。

要解決就要使用圖形驗證碼或者行爲式驗證碼

圖形驗證碼較簡單,並且不須要花錢,本身開發程序就能夠實現,效果以下

這種視覺上看起來很費勁並且須要增長用戶輸入操做,體驗不是很好,並且機器識別並解析其中的文字卻比較容易。若是想要增長機器識別的難度就須要增長圖片的模糊度,這樣用戶的錯誤率就更高了,體驗更差。

行爲式驗證碼 到這就不得不提逢年過節買車票讓人抓狂的12306的圖片驗證,這是種點觸式的,以下

還有目前更經常使用的方案是拖拽式的,以下

這種體驗上就比圖形要好不少,更方便美觀,背景圖還能夠用來打廣告。

行爲式驗證的核心思想是利用用戶的「行爲特徵」來作驗證安全判別,經過機器學習,深度學習對人的行爲特徵進行大量的分析。創建安全模型去區分人與機器程序。利用深度學習構建的神經網絡是能夠不斷地自主學習的,在不斷的驗證過程當中不斷的學習新的特徵分析(來源百度百科)

通常企業沒有這個能力,須要花錢買

不想花錢也能夠經過摳圖實現簡單的滑塊,服務端記錄滑塊摳圖的位置到圖片邊緣的距離,把原圖和滑塊給前端,前端在用戶滑動以後把滑動的距離傳給服務端,服務端經過對比用戶拖動滑塊的距離來驗證是否正確(安全性不行)。

還有就是API增長限流

總結:

  1. 頻控,增長短信發送間隔時間驗證碼過時時間同一帳號發送限制次數限制的間隔時間 控制。
  2. 增長IP調用接口的頻率。
  3. 經過校驗避免一些沒必要要的接口調用,像手機號格式校驗註冊功能:系統中已存在的不發送,修改密碼:系統中不存在的不發送
  4. 增長行爲式驗證碼。
  5. 限流

 仍是那句話,沒有絕對的安全,安全是攻與防的較量。

相關文章
相關標籤/搜索