DISCUZ 论坛升级20131122后出现错误的解决方法

  • 2013年11月24日
  • 2,555
  • A+
所属分类:PHP开发
摘要

近日,DISCUZ论坛升级了20131122版本,该版本有对安全进行提升,但是提升后存在部分BUG,致使论坛使用出现这样那样的错误,部分插件不能正常工作,我个人的解决方案为:

近日,DISCUZ论坛升级了20131122版本,该版本有对安全进行提升,但是提升后存在部分BUG,致使论坛使用出现这样那样的错误,部分插件不能正常工作,我个人的解决方案为:

找到文件:source/class/discuz/discuz_application.php ,中间大约350行左右,有_xss_check()这个函数,将其进行更换回原来的版本,解决问题:

新内容:

[php]

private function _xss_check() {

static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');

if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
system_error('request_tainting');
}

if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
$temp = $_SERVER['REQUEST_URI'];
} elseif(empty ($_GET['formhash'])) {
$temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
} else {
$temp = '';
}

if(!empty($temp)) {
$temp = strtoupper(urldecode(urldecode($temp)));
foreach ($check as $str) {
if(strpos($temp, $str) !== false) {
system_error('request_tainting');
}
}
}

[/php]

 

替换为,旧版的:

[php]

private function _xss_check() {
$temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
system_error('request_tainting');
}
return true;
}

[/php]

 

这样能解决很多问题,目前这样替换,还没遇到其他的问题,正式的等官方更新吧,应该最近会出处理对策的!

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
已经不想再回到起点了,不想再失去重要的朋友,这本笔记对我来说很重要。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: