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

  • A+
所属分类:脚本开发
摘要

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

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

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

新内容:


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');
 }
 }
 }

 

替换为,旧版的:


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;
 }

 

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

  • 我的微信
  • 加我请备注缘由
  • weinxin
  • 我的微信公众号
  • 轻松随便关注
  • weinxin

发表评论

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

关闭震动