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