(1)情景再現:
客服産品中心接到使用者回報的問題:網絡正常,但是網頁無法加載,網站首頁可以登入,公司開發的論壇APP也是這種情況,使用者問答子產品資料無法加載。由于是初創公司,産品去年剛剛上線,以為是資料庫的Bug,進行測試之後并不是資料庫的問題,可以排除。由開發人員檢查功能代碼發現并不存在邏輯問題。次日,監控報警顯示資料庫磁盤使用率高達98%。同時通知運維人員進行資料的熱遷移和磁盤的擴容,問題得以暫時的緩解,監控顯示磁盤資料增量基本保持不變資料持續增長。尤其是在中午或者是傍晚,資料庫伺服器負載明顯偏高,經過一天的技術排查仍未發現問題。檢視網站Web伺服器的日志發現不同的IP位址通路該論壇網站的時間間隔是呈現一緻的規律性,但是間隔的時間并不是一樣,懷疑友商攻擊。由于Web伺服器的負載均衡,并沒有感覺到Web伺服器的負載出現問題,也正是負載均衡屏蔽了這個隐蔽的事件。同時監控系統的設計也沒有精準統計IP位址的通路時間間隔資料,隻是統計通路時段的資料。這為解決問題進一步提供了線索,我們把問題放在使用者送出的資料上,把資料庫的資料導出發現,使用者問答子產品存入的資料超過70%都是空白,由此可以确定是攻擊者在不同間隔的時間使用程式持續送出空白的問題,并使用空格或者是特殊字元進行回答導緻資料庫磁盤爆滿,給使用者留下登入正常,就是看不到資料的假象,其實伺服器傳回的資料正是攻擊者送出的空格。
(2)問題解決:
開發人員在代碼中實作特殊字元和空格字元的判斷,并且不允許同一使用者在同一時間發送多個問題。
運維人員做好資料庫存儲的彈性伸縮存儲,并過濾頻繁訪網站的IP位址。
監控程式增加同一IP位址登入發文時間間隔的資料收集和統計。
本文轉自 棋帥小七 51CTO部落格,原文連結:http://blog.51cto.com/xvjunjie/2055817