浏览 2228 次 / [ 天下网闻 ] Discuz游客首页搜索错误:您当前的访问请求当中含有非法字符
  • 发布时间 2017-03-16 14:59
  • Discuz! X3.2

    今天有用户反映遇到此情况,排查时发现都正常,最后发现是用户未登录状态下在论坛首页搜索才会出此错误,找到以下两种解决方法:
    Discuz游客首页搜索错误-您当前的访问请求当中含有非法字符.png

    方法一:[此方法改完后网站特卡,不知道是不是使用搜索的游客突然增多服务器吃不消的关系]

    故障描述退出登录时出现”您当前的访问请求当中含有非法字符,已经被系统拒绝“错误。

    解决方案如下:
    \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.         }
    复制代码
    或使用官方方法解决:http://www.discuz.net/thread-3485502-1-1.html
    上传覆盖同名文件,后台更新缓存,重新登录退出看看是否解决了。



    本文转自:http://www.discuz.net/thread-3484417-1-1.html

    ----------------------------------------------------------------------

    方法二 [对我无效]:

    游客 搜索 出现 Discuz! System Error 错误!!


    还是上一方法的文件,打开source/class/discuz/discuz_application.php,最下面三行前面加上//注释符,如下

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

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