Discuz搜索报错

Discuz! System Error

Time: 2022-02-16 04:45:55 +0000 IP: 113.72.211.179 BackTraceID: 066b5104fb973d1ded8a4b2809ff27f4

您当前的访问请求当中含有非法字符,已经被系统拒绝

PHP Debug

Line: 0022search.php(discuz_application->init)

Line: 0072source/class/discuz/discuz_application.php(discuz_application->_init_misc)

Line: 0600source/class/discuz/discuz_application.php(discuz_application->_xss_check)

Line: 0373source/class/discuz/discuz_application.php(system_error)

Line: 0023source/function/function_core.php(discuz_error::system_error)

Line: 0024source/class/discuz/discuz_error.php(discuz_error::debug_backtrace)

解决方法

source/class/discuz/discuz_application.php

步骤 1:定位并替换 _xss_check() 函数

搜索下面的代码

复制代码
static $check = array('"', '>', '<', '\'', '(', ')', 'CONTENT-TRANSFER-ENCODING');

在代码下面新增(直接复制以下代码)

复制代码
    // 新增:放行 search.php 的搜索请求(核心修复)
	if(CURSCRIPT === 'search' || basename($_SERVER['SCRIPT_NAME']) === 'search.php') {
		// 仅拦截明显的XSS攻击字符,放行正常搜索关键词
		$danger_pattern = '/<script|javascript:|onload=|onclick=|eval\(|alert\(|document\.cookie|vbscript:/i';
		$request_str = '';
		
		if($_SERVER['REQUEST_METHOD'] == 'GET' ) {
			$request_str = $_SERVER['REQUEST_URI'];
		} elseif(empty ($_GET['formhash'])) {
			$request_str = $_SERVER['REQUEST_URI'].http_build_query($_POST);
		}
		
		if(!empty($request_str) && preg_match($danger_pattern, strtoupper(urldecode(urldecode($request_str))))) {
			system_error('request_tainting');
		}
		return true;
	}

如下图

步骤 2:保存并验证
  1. 保存修改后的 discuz_application.php 文件(确保编码为 UTF-8 无 BOM)
  2. 登录论坛后台 → 工具 → 更新缓存
  3. 清除浏览器缓存(Ctrl+F5),以未登录状态测试搜索功能

关键修改说明

  1. 核心放行逻辑 :新增了对 search.php 的判断,仅拦截包含 <script、javascript: 等明显恶意的 XSS 字符,放行包含 "、>、< 等的普通搜索关键词。
  2. 保留原有安全 :除了 search.php 外,其他页面(如登录、发帖、后台)仍使用原有的严格检查逻辑,不会降低论坛整体安全性。
  3. 兼容性:适配 Discuz! X3.5 的 CURSCRIPT 常量和 SCRIPT_NAME 两种判断方式,避免服务器环境差异导致失效。
相关推荐
风控PM说1 小时前
入门第二课:业务催生风险,常见的业务风险有哪些?
安全
运维行者_8 小时前
企业无线网络监控的挑战与智能化演进趋势
大数据·运维·服务器·网络·数据库
三8449 小时前
文件查找/文件压缩/解压缩
linux·运维·服务器
小猪写代码10 小时前
Linux 管道(Pipeline)作业
linux·运维·服务器
桌面运维家10 小时前
如何用半缓存云桌面将服务器硬盘容量扩展至本地终端?
运维·服务器·缓存
Jurio.10 小时前
Codex App SSH 远程开发教程:本地连接远程服务器项目
服务器·ssh·远程工作·codex
Coder_Shenshen10 小时前
西门子S7CommPlus协议鉴权算法原理与流程详解
网络·后端·算法
tryCbest13 小时前
Python 文件操作
服务器·python
HavenlonLabs13 小时前
Havenlon 对抗性完整(十七):安全不是“防住攻击”,而是控制失败方式
网络·人工智能·架构·安全威胁分析·安全架构·havenlon
fei_sun13 小时前
路径MTU发现
linux·运维·网络