浏览 2562 次 / [ 天下网闻 ] Discuz: 您当前的访问请求当中含有非法字符,已经被系统拒绝
  • 发布时间 2017-04-09 19:29
  • DISCUZ! X3.2  - 后台 » 工具 » 运行记录 » 系统错误

    666.png 004.png
    005.png

    之前遇到这个问题不是在后台显示,而是直接页面加载错误时显示,今天观察运行记录,并修改,目前未发现修改后引发其他错误的迹象,如有问题以后回来补充,解决方法如下[注意做好备份]:

    本方法参考的: Discuz!官网:  运行记录系统错误不间断报错是怎么回事啊!

    \source\class\discuz的discuz_application.php
    查找:
    1.         private function _xss_check() {

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

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

    6.                 if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
    7.                         $temp = $_SERVER['REQUEST_URI'];
    8.                 } elseif(empty ($_GET['formhash'])) {
    9.                         $temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');
    10.                 } else {
    11.                         $temp = '';
    12.                 }

    13.                 if(!empty($temp)) {
    14.                         $temp = strtoupper(urldecode(urldecode($temp)));
    15.                         foreach ($check as $str) {
    16.                                 if(strpos($temp, $str) !== false) {
    17.                                         system_error('request_tainting');
    18.                                 }
    19.                         }
    20.                 }

    21.                 return true;
    22.         }
    复制代码
    替换为:
    1.         private function _xss_check() {
    2.                 $temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
    3.                 if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp, 'CONTENT-TRANSFER-ENCODING') !== false) {
    4.                         system_error('request_tainting');
    5.                 }
    6.                 return true;
    7.         }
    复制代码
    ---------------------------------------------------------------------------------------------------------------


    补充:以上按官方修改几分钟后出现新的错误提示:
    003.png

    此处错误提示中User: uid=1,说明是管理员遇到的错误,其他会员也许也会遇到吧。测试的解决如下方法,如有问题再回来补充:

    找到上方代码中的system_error('request_tainting');注释掉:
    1. // system_error('request_tainting');
    复制代码
    最终如下:
    1. <blockquote>        private function _xss_check() {
    复制代码
    这句代码之前有注释过,当时遇到的问题与本例类似,见:Discuz游客首页搜索错误:您当前的访问请求当中含有非法字符