标记
''*800的帖子时的资源占用情况: ''* =<583 正常贴上,可以删除 ''* 584 正常贴上,可以编辑,但不能删除 ''* 585 提示 Could not enter post text! 但贴子也没有 ''* 586 正常贴上,可以删除 ''* 587 提示 Could not enter post text! 但贴子也没有 ''* 588 正常贴上,可以删除 ''* 589 提示 Could not enter post text! 但贴子也没有 ''* >=590 提示 Could not enter post text! 出现删不掉的帖子 以下内容为程序代码:
[code]\0
\0[/code]
虽然只有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", "Code:
\\1
", $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的,希望大家自己对自己的论坛进行测试,如有问题,参考本文酌情解决。关于我们 | 联系方式 | 广告刊例 | 业务合作 | 软件发布 | 版权声明 | 帮助信息 | 网站地图
广告联系 QQ:53104695 Msn: jfskychina(#)hotmail.com
Copyright © 2004 - 2010 www.jfsky.com™, 飓风软件园版权所有 湘ICP备05003989号
本站所有资源均来自互联网,如有侵犯您的版权或其他问题,请通知管理员,以便我们及时处理!!
