PHP寫的API如何防止拒絕服務攻擊?
01-15
現在很多公司都是用PHP寫API來對接前端的web/iOS/Android,雲和端是完全分離的,無法做到動態協商。如果雙方都協定一個靜態KEY,那麼在web的js中是透明的,就算是ios/android也很容易通過截包或反編譯獲得這個KEY。
現在一般的雲服務能接受的最大並發也幾千,如果被拒絕服務攻擊給佔滿勢必會影響正常用戶的訪問。尤其是用類似websocket這樣的通信協議,一旦建立了連接就會一直占著坑,隨便寫一段簡單的多線模擬連接來騷擾一下,伺服器就基本攤了。請問如何在PHP端適當的防止此類攻擊?不必太極致,把癱瘓控制在10分鐘內一般的小型應用應該還是可以接受的。
其實題主說的問題 普遍存在 從兩方面可以說下
代碼方面:
程序員的經驗吧 。一般就是代碼方面黑白名單 其次就是介面超時的處理 剩下的就是一些規範。其實沒有什麼特別好的經驗 。更多來說 一般的小黑客也不會直接DDOS你 。要是真的DDOS 你 這些基本也夠了。 更多是日常維護的對數據異常的處理。其實 你不用擔心被惡意攻擊。介面這東西 說白了 也是POST GET 。只要你在處理介面數據時候過濾 保證數據的安全性 一般的漏洞是可以防住的 。 一般的三流黑客基本都會擋在這個門口。 除非你網站很出名 那你可以找安全公司做下測試 。基本也就OK應對DDoS攻擊,更多的是系統層面的防護,PHP寫的API介面一般是業務上的,業務上的PHP能做的就是不要掛,做到盡量快的響應另外考慮到機器負載能力,基本上這類問題就需要用到流量控制,限定一個終端對於某個API一段時間內訪問次數
太頻繁的就封IP唄
ip白名單
1.認證介面接收一個客戶端時間和一個簽名。首先驗證客戶端時間與伺服器時間在一定誤差範圍內(比如±5分鐘,誤差範圍越大越不安全),然後驗證簽名是否一致(簽名演算法必須使用客戶端時間),成功後返回一個token和一個隨機字元串。
2.除認證介面之外的所有介面必須接收token和一個簽名。首先檢查token是否合法,然後驗證簽名是否一致(簽名演算法必須使用認證介面返回的隨機字元串)。
3.所有介面做策略: 1) 驗簽失敗一定次數(1次,2次,3次,越大越不安全),屏蔽ip。 2) 單ip調用超限(最好根據業務需要,針對每個介面做不同的限制。比如登錄,可以要求5次/天),屏蔽ip。不用這麼麻煩,使用iptables
一般用web伺服器做防禦就可以了,Nginx或Apache網上都有防DDoS的配置方案和插件直接可以使用
不需要及時交換的數據可以通過PHP生成.json或xml的數據文件,建立更新機制,系統自動跑,前端直接讀取文件,這樣可以降低資料庫請求及系統邏輯的處理。需要交互類的介面可以通過用戶登錄後方法密鑰(密鑰需要有生命周期的)進行相關加密(密鑰2)流程後再向伺服器發送https post請求,接收數據後首先解密對比密鑰,密鑰不對直接攔截不做處理。從web服務上作出請求限制60秒內最大請求次數,超過後密鑰作廢,屏蔽ip1分鐘,再結合雲端黑白名單安全有所保證。
終於知道token和一個隨機字元串的用意了,哈哈
推薦閱讀:
※怎樣通俗的講解 PHP 和 Apache 的關係?
※Web 應用、服務是如何工作的?
※hadoop學習路線,希望各位幫幫忙?
※php-cgi和php-fpm有什麼關係?
※項目做到什麼程度才可以進入Apache Incubator(Apache孵化器)?