2015-06-14 60 views
0

我使用mysql + php運行聊天室(phpfreechat)。我有專門的服務器來運行這個腳本,因爲它可能會消耗大量資源。它適用於100個併發用戶。然而,最近用戶威脅我們殺了這個聊天室,他成功地做到了這一點:(Php + MySql應用程序的響應緩慢

只有40個用戶,聊天室已經死了,需要10-20秒才能發送一條消息,MySql正在吃300%然而CPU,100名的用戶(當它沒有受到攻擊),聊天室只使用200%-300%的CPU。我檢查了下面的事情,以確保他不加藥/ DDoSing我們的服務器。

1 - Limited 3 requests per seconds. 
2 - Analyzed access.log to see any weird activity or CRLF slow attacks. There is none. 
3 - Looked per IP connections using netstat command and none has lots of connections. 
4 - I disabled ping of death 

靜態網站服務器工作正常,即使在攻擊下,我假設他通過聊天室通過發送很多請求來利用mysql。我運行以下查詢來查看當前與mysql的連接:

SHOW STATUS WHERE `variable_name` = 'Threads_connected' 

結果只有7,看起來很正常。是否有其他措施可以阻止他的攻擊並保護我的服務器(聊天室)?

+1

您可以啓用mysql日誌來查看正在調用哪些和多少個語句。緩慢的查詢日誌也給了困擾的人。 – Tim3880

+0

檢查nginx和apache日誌啓用ddos阻止程序 –

+0

@ Tim3880,MySql日誌已經啓用,沒有什麼奇怪的。有什麼具體的我應該登錄或尋找日誌? – Vik

回答

1

(從最後的評論) 啊,這意味着攻擊者使用的MySQL注入嘗試一些查詢,所以首先你要

1)淨化你的輸入

如果您正在使用PDO或mysqli的然後使用綁定PARAMS(準備語句)功能來篩選輸入

或至少mysqliescapestring輸入

一個d。如果你的PHP頁面需要的值是這樣的.../page.php?id=10然後檢查值&確保它是整隻喜歡下面

if(is_numeric($_GET['id'])){ //do operations...}else { //suspicious input given by someone so exit} 

2)限制查詢執行時間

當您在長時間運行查詢(這是黑客),然後限制查詢執行時間,使用語句超時,wait_timeout功能,以便查詢將有有限的執行時間

而且正如我在前面在你的apache訪問日誌中所說,你會發現這些睡眠查詢作爲GET pa這樣,找到它並阻止該IP