Discuz! 安全更新[20090818] 适用所有版本(5.5版本手动修改已有所改动)
转自:[url=http://www.discuz.net/thread-1388523-1-1.html]http://www.discuz.net/thread-1388523-1-1.html[/url][b]更新描述:[/b]
Discuz! 后台自定义风格功能模块由于用户提交数据的合法性判断不足,造成管理员可以构造特殊数据生成缓存文件。[color=red]当管理员账号泄露或者被窃时,将直接威胁论坛的安全使用。[/color]
[b]安全威胁:[/b]
中
[b]修补办法:[/b]
1. 首先下载补丁文件 [url=http://download.comsenz.com/Discuz/patch/all/Discuz_patch_20090818.zip]Discuz_patch_20090818.zip[/url]
2. 在本地解压缩文件包,根据您目前的版本,选择相应的文件夹
3. 将文件夹内的文件上传至论坛所在服务器,覆盖原有文件
4. 使用 FTP 删除论坛 forumdata/cache/ 目录里面的所有文件
5. 访问您的论坛,此时,论坛会自动更新并生成所有缓存文件
[b]重要提示:[/b]
为保障您论坛的安全,更新完毕以后,请进入论坛管理后台, 使用 工具 --- 文件校验功能对您的文件进行安全校验。如在站点目录中发现多余文件,请即刻删除。
如果有文件被修改,请务必确认修改文件的行为是站长自身,否则请使用标准程序进行覆盖。
本人手动修改之办法見 #2 手动修改方法:
更新文件:
[list][*]admin/styles.inc.php[*]include/cache.func.php[*]discuz_version.php[/list]
分析:
[list]
[*]主要修改部分是修正正则判断
[*]admin/styles.inc.php
[quote]} elseif(!preg_match("/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/", $newcvar)) {[/quote]
变为
[quote]} elseif(!preg_match("/[color=Red]^[/color][a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*[color=Red]$[/color]/", $newcvar)) {[/quote]
[*]Discuz! 5.5 include/cache.func.php 添加红色部分文字
[quote]function getcachevars($data, $type = 'VAR') {
$evaluate = '';
foreach($data as $key => $val) {
[color=Red] if(!preg_match("/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/", $key) && !preg_match("/^_DCACHE\['[a-zA-Z0-9_]+\'\]$/",$key)) {
continue;
}[/color]
if(is_array($val)) {
$evaluate .= "\$$key = ".arrayeval($val).";\n";
} else {
$val = addcslashes($val, '\'\\');
$evaluate .= $type == 'VAR' ? "\$$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n";
}
}
return $evaluate;
}[/quote]
[*]Discuz! 5.5 版本除外 include/cache.func.php 添加红色部分文字
[quote]function getcachevars($data, $type = 'VAR') {
$evaluate = '';
foreach($data as $key => $val) {
[color=Red] if(!preg_match("/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/", $key)) {
continue;
}[/color]
if(is_array($val)) {
$evaluate .= "\$$key = ".arrayeval($val).";\n";
} else {
$val = addcslashes($val, '\'\\');
$evaluate .= $type == 'VAR' ? "\$$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n";
}
}
return $evaluate;
}[/quote]
[*]discuz_version.php 版本改为 20090818
[quote]define('DISCUZ_RELEASE', '[color=Red]20090818[/color]');[/quote]
[*]Google Adsense可參考以下這篇
[url]http://www.freediscuz.net/bbs/thread-5175-1-2.html[/url]
[/list]
[[i] 本帖最后由 044003 于 2009-8-25 12:27 编辑 [/i]] 已手動更新,感謝。 恩...跟想象中一样了...
那个h什么的朋友的第1个方法
回复 4# Cnstudent 的帖子
我觉得它的第二个修改步骤(include/cache.func.php)中将有问题的直接使用continue忽略不写入。这个挺巧妙......对于自己来说,真该学学break和continue的灵活使用了......
更新後 forumdisplay.php 出問題了
[code]Warning: Invalid argument supplied for foreach() in /forumdisplay.php on line 78[/code]第 78 行是 foreach($_DCACHE['forums'] as $sub) {Discuz! 版本 5.5
回复 6# seoxoo 的帖子
这个与更新无关重刷板块缓存尝试一下
回复 7# horseluke 的帖子
OH,果然解決了,神奇!MANY THANKS! Dis[color=Red]uc[/color]z_patch_20090818.zip
高亮2个字母 完毕
回复 9# Cnstudent 的帖子
话说这补丁放在[url]http://www.comsenz.com[/url]而不是[url]http://download.comsenz.com/Discuz/patch/[/url]挺离奇的~
回复 10# horseluke 的帖子
可能官方重新打包太麻煩:lol回复 11# 044003 的帖子
按道理,它应该放到patch目录下。 官方那个补丁包里还有 For 6.1F的;P看来老师懒得来这边更新了。 强烈建议把置顶上的下载也更新了,方便后面下载的朋友 置顶了自己的帖;P 還是手動更新比較放心,謝謝提供:) 一直都看这个帖子标题不顺眼
现在终于明白为啥不顺眼了:
回复 17# CS1.3 的帖子
:L :L :L回复 17# CS1.3 的帖子
C跑右边去了CS1.3 那块 传闻dz5.5的补丁有一定问题([url]http://www.discuz.net/thread-1391381-1-1.html[/url],and this:[url]http://www.discuz.net/thread-1392044-1-1.html[/url])
现在太晚没法测试,待明日写完报告后再测试确认之~
[[i] 本帖最后由 horseluke 于 2009-8-25 00:18 编辑 [/i]]
页:
[1]
2