在使用Discuz论坛系统时,用户可能会遇到一个常见的错误提示:“您当前的访问请求当中含有非法字符,已经被系统拒绝”。这一问题通常出现在用户尝试退出登录时。以下是针对该问题的详细解决方案,旨在帮助网站管理员快速定位并修复问题。
首先,我们需要明确问题的根源。此错误通常是由系统的XSS防护机制触发的。Discuz内置了一个名为`_xss_check()`的函数,用于检测用户请求中是否包含潜在的恶意字符。如果检测到非法字符,系统将自动阻止请求并返回上述错误信息。
### 解决方案 要解决这个问题,我们需要对`discuz_application.php`文件中的`_xss_check()`函数进行修改。以下是具体步骤: 1. 打开`source/class/discuz/discuz_application.php`文件。 2. 查找原始的`_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');  
            }  
        }  
    }  
    return true;  
}
    
3. 将上述代码替换为以下简化版本:

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

### 修改后的效果 通过上述修改,我们移除了部分不必要的字符检查逻辑,同时保留了对关键非法字符(如`<`、`"`和`CONTENT-TRANSFER-ENCODING`)的检测。这样既能有效防止XSS攻击,又可以避免误报导致正常请求被拒绝。
### 注意事项 在进行任何代码修改之前,请确保备份原始文件。此外,建议定期更新Discuz系统至最新版本,以获得官方提供的安全补丁和支持。
希望以上内容能帮助您顺利解决问题!如果您还有其他疑问或需要进一步的帮助,请随时联系技术支持团队。 空格标签示例:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            &