雖然只有49Byte的數據,但資源占用非常可觀: PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 25741 nobody 14 0 11828 9996 416 R 99.9 7.8 2:38 httpd 幾秒鐘后產生了大量的數據,內存大量消耗: PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 3 root 10 0 0 0 0 SW 2.5 0.0 4:13 kswapd 25742 nobody 17 0 265M 90M 52104 R 25.1 73.0 1:45 httpd 這樣的鑲套帖子是不會存儲到數據庫中的,但隨著鑲套的增加資源的占用會按照幾何級數遞 增。如果一次發送更多數據,或者不斷的發送,可以導致系統資源大量占用,最終拒絕服務。 實驗環境:linux 2.4.10 Apache/1.3.23 PHP 4.12 解決方案: 1、暫時禁用BBcode。 2、alert7給出了functions.php的如下修改方法,暫時停用對鑲套標記的支持: 把773行開始的bbencode_code函數改為: function bbencode_code($message, $is_html_disabled) { $message = preg_replace("/\[code\](.*?)\[\/code\]/si", "<!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>\\1</PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->", $message); return $message; } // bbencode_code() 對于無法正常刪除的帖子,需要手工連接數據庫刪除。假設有這樣一個帖子: http://host/forums/viewtopic.php?topic=1162&forum=1&0 可以這樣: $ mysql -uuser -ppasswd mysql> use databasename; mysql> select * from topics where topic_id = 1162; //得到post_id mysql> delete from posts where post_id = 6280; mysql> delete from posts_text where post_id = 6280; mysql> delete from topics where topic_id = 1162; 關于我們: WSS (Whitecell Security Systems),一個非營利性民間技術組織,致力于各種系統安 全技術的研究。堅持傳統的hacker精神,追求技術的精純。 WSS 主頁:http://www.whitecell.org/ WSS 論壇:http://www.whitecell.org/forum/ 補充:后來的測試發現相當多的BBS都有類似問題,包括基于php、cgi、asp的,希望大家自己對自己的論壇進行測試,如有問題,參考本文酌情解決。 |
溫馨提示:喜歡本站的話,請收藏一下本站!