虽然只有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的,希望大家自己对自己的论坛进行测试,如有问题,参考本文酌情解决。 |
温馨提示:喜欢本站的话,请收藏一下本站!