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 两种判断方式,避免服务器环境差异导致失效。
相关推荐
微软技术分享2 小时前
面向二进制安全的大模型多智能体框架
网络·安全·web安全
不会就选b2 小时前
Linux之TCP理论<1>
linux·运维·服务器
小π军3 小时前
操作系统面试题
java·linux·服务器
Android系统攻城狮4 小时前
Linux Gstreamer深度解析之gst_audio_encoder_get_frame_samples_min调用流程与实战(六十)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
大猫会长8 小时前
调用codebuddy集成的supabase授权白屏解决方法
linux·运维·服务器
搁浅小泽8 小时前
新能源汽车多合一压缩机控制器CAN网络测试规范
网络·汽车
夜之眷属8 小时前
服务器被挖矿病毒入侵的排查与清理实录
运维·服务器
传人9 小时前
为什么 Xshell 中可以通过java -version查询到java 版本号码,Electerm 却查不到?
java·linux·服务器
陌上花开缓缓归以9 小时前
mebdlts3.4.1安全启动全流程
服务器·算法
鬼手点金9 小时前
opencode-全能开发者配置
java·linux·服务器·前端·javascript·学习·前向传播