隨著移動網際網路的興起,現在的APP開發模式都是APP + api模式,如圖
由於app和api需要通過網路通訊,api一般都是直接 對外的,所以api的訪問安全就很重要了,api沒有任何限制,或只有很簡單的防護措施,這是很多新手容易犯的錯誤,一個漏洞,就可能讓你的系統崩潰,資料洩露!
所以網路安全顯得越來越重要了,api安全措施有很多,常用的如https、資料加密、url資料簽名等方法。api防刷也屬於介面安全的範疇。
基本分兩種情況
1. 惡意訪問
使用工具進行不停的迴圈訪問,佔用系統資源,影響系統正常的對外服務
2. 支付介面、簡訊傳送介面等,
這種介面直接會導致企業的損失,更要注意。
魔高一尺道高一丈,我們常用措施
1. 根據ip限制訪問頻率
限制訪問,訪問的時候記錄使用者IP
寫到redis中,以ip為鍵,每次訪問+1,有效期一個小時;
每訪問一次就給這個IP+1,比如限制1w次,加到1W次就拒絕訪問,直到記錄過期,
這種方式簡單粗暴,對於惡意攻擊、爬蟲抓取很有效果,但難免會有誤傷,影響正常的訪問請求。
2.驗證碼
通過驗證碼,可以限制很多的非法的介面訪問了。
3. 限制傳送頻率
我以前做系統 ,也是對同一手機號傳送有限制,同一功能的驗證碼限5次,所有功能限10次,這樣一個手機號就刷不了很多了。
3. 後端邏輯驗證
如果別人通過抓包完全看到你的請求,傳送了完全相同的引數,進行重放攻擊,如何防範呢?
這種可能訪問被人抓了包,也可能是使用者連續提交,簽名和 access token這些措施是無效的。這時就需要server端進行判斷了。
充值支付類的api,對訂單的狀態加以判斷,已處理過的訂單,不再重複處理。
增加時間戳,對於過期的請求不再處理。
4. 介面訪問監控
一般來說,我們會有api訪問監控,如果一個 ip訪問頻率異常,如果達到一定數量,我們可以系統報警通知管理員,將損失降到最小。
單一措施,很難完全做到介面安全,我們要綜合運用多項措施,才能做到萬無一失!