DiscuzX 3.2 死循环GET漏洞修复方案
就在刚刚,Hostker 又遇到一个客户被访客 CC 自己,查看 URL 非常熟悉,正是年初时我们报的 Bug。
滚去官网发现最后更新时间是 6 月,然而下回来的代码发现官方还是没修好这个地方。DZ 已完。
想帮客户修复时发现细节已经忘光,还好有聊天记录可以翻到。因此记下这个 Bug 以及修复方案。
漏洞说明
如果连续多层楼(例如4层)都有回帖可见或者购买可见的隐藏内容,并且隐藏内容为图片的时候(文字暂时没测试),在帖子第一页底部进行回帖,会导致死循环变成CC攻击服务器,此时浏览器失去响应,关闭都很困难,只能杀死浏览器进程。
以下是服务器的 Log:
祈祷这个访客的爪机不会爆炸吧 /w\
我对 DiscuzX 不是很熟悉,因此联系到 BranchZero (DZ 签到插件的开发者)协助排查问题,以下细节均为 BranchZero 提供。
在 \static\js\forum_viewthread.js 大约 228 行有一个函数 succeedhandle_fastpost 代码如下:
[js]
function succeedhandle_fastpost(locationhref, message, param) {
var pid = param['pid'];
var tid = param['tid'];
var from = param['from'];
if(pid) {
ajaxget('forum.php?mod=viewthread&tid=' + tid + '&viewpid=' + pid + '&from=' + from, 'post_new', 'ajaxwaitid', '', null, 'fastpostappendreply()');
if(replyreload) {
var reloadpids = replyreload.split(',');
for(var i = 1;i < reloadpids.length;i++) {
ajaxget('forum.php?mod=viewthread&tid=' + tid + '&viewpid=' + reloadpids[i] + '&from=' + from, 'post_' + reloadpids[i], 'ajaxwaitid');
}
}
$('fastpostreturn').className = '';
}
[/js]
这个 pid 用于回帖后去服务器获取对应楼层内容,并显示出来。看起来似乎没什么问题。
唯一有可能存在问题的地方就是 for 循环,因此把 i 和 replyreload 打印出来,发现 replyreload 值为 ,2,3,4,5,6,7
然而 i 一直停留在 5 并且一直在重复死循环。一定是 ajaxget 函数改变了 i ,继续跟踪看看:
Bug 就是这么来的╮(╯▽╰)╭
修复方法
succeedhandle_fastpost 函数的 i 变量改改名字即可,像这样:
[js]
function succeedhandle_fastpost(locationhref, message, param) {
var pid = param['pid'];
var tid = param['tid'];
var from = param['from'];
if(pid) {
ajaxget('forum.php?mod=viewthread&tid=' + tid + '&viewpid=' + pid + '&from=' + from, 'post_new', 'ajaxwaitid', '', null, 'fastpostappendreply()');
if(replyreload) {
var reloadpids = replyreload.split(',');
for(hostker_i = 1;hostker_i < reloadpids.length;hostker_i++) {
ajaxget('forum.php?mod=viewthread&tid=' + tid + '&viewpid=' + reloadpids[hostker_i] + '&from=' + from, 'post_' + reloadpids[hostker_i], 'ajaxwaitid');
}
}
$('fastpostreturn').className = '';
}
[/js]
没看明白怎么 bug 的!!
i 被 ajaxget 调用的 ajaxinnerhtml 固定为 5 导致死循环
DZ 乙烷……
说真的,自从被疼讯收购,Dz 比 PW 还不活跃
越来越感觉 Discuz! X 系列越做越不行,甚至不如 Discuz! 7.2。被 T 讯收购之后尤其如此。现在更是直接弃坑了。
然而国人更多适应的是 Discuz 的模式。
求申请友情链接~然而没找到专门的页面,就只能在这里发了~
标题:赵
地址:https://www.zhaojin97.cn
友情链接顾名思义,只加认识的小伙伴的。