PHP寫的API如何防止拒絕服務的攻擊?
來源:互聯網
上載者:User
現在很多公司都是用PHP寫API來對接前端的web/iOS/Android,雲和端是完全分離的,無法做到動態協商。如果雙方都協定一個靜態KEY,那麼在web的js中是透明的,就算是ios/android也很容易通過截包或反編譯獲得這個KEY。
現在一般的雲端服務能接受的最大並發也幾千,如果被拒絕服務的攻擊給佔滿勢必會影響正常使用者的訪問。尤其是用類似websocket這樣的通訊協定,一旦建立了串連就會一直佔著坑,隨便寫一段簡單的多線類比串連來騷擾一下,伺服器就基本攤了。
請問如何在PHP端適當的防止此類攻擊?不必太極致,把癱瘓控制在10分鐘內一般的小型應用應該還是可以接受的。
回複內容:
其實題主說的問題 普遍存在 從兩方面可以說下
代碼方面:
程式員的經驗吧 。一般就是代碼方面黑白名單 其次就是介面逾時的處理 剩下的就是一些規範。其實沒有什麼特別好的經驗 。更多來說 一般的小駭客也不會直接DDOS你 。要是真的DDOS 你 這些基本也夠了。 更多是日常維護的對資料異常的處理。
其實 你不用擔心被惡意攻擊。介面這東西 說白了 也是POST GET 。只要你在處理介面資料時候過濾 保證資料的安全性 一般的漏洞是可以防住的 。 一般的三流駭客基本都會擋在這個門口。 除非你網站很出名 那你可以找安全公司做下測試 。基本也就OK 應對DDoS攻擊,更多的是系統層面的防護,PHP寫的API介面一般是業務上的,業務上的PHP能做的就是不要掛,做到盡量快的響應
另外考慮到機器負載能力,基本上這類問題就需要用到流量控制,限定一個終端對於某個API一段時間內訪問次數1.認證介面接收一個用戶端時間和一個簽名。首先驗證用戶端時間與伺服器時間在一定誤差範圍內(比如±5分鐘,誤差範圍越大越不安全),然後驗證簽名是否一致(簽名演算法必須使用用戶端時間),成功後返回一個token和一個隨機字串。
2.除認證介面之外的所有介面必須接收token和一個簽名。首先檢查token是否合法,然後驗證簽名是否一致(簽名演算法必須使用認證介面返回的隨機字串)。
3.所有介面做策略:
1) 驗簽失敗一定次數(1次,2次,3次,越大越不安全),屏蔽ip。
2) 單ip調用超限(最好根據業務需要,針對每個介面做不同的限制。比如登入,可以要求5次/天),屏蔽ip。ip白名單太頻繁的就封IP唄不用這麼麻煩,使用iptables