首先,我们需要明确问题的根源。此错误通常是由系统的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;
}
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系统至最新版本,以获得官方提供的安全补丁和支持。
希望以上内容能帮助您顺利解决问题!如果您还有其他疑问或需要进一步的帮助,请随时联系技术支持团队。 空格标签示例: &