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 两种判断方式,避免服务器环境差异导致失效。
相关推荐
企业解惑小助手6 分钟前
CAD图纸透明加密解决方案:给设计院上图纸加密,最难的不是加密,是让 200 个设计师不骂人
安全
Dxy123931021628 分钟前
Linux 压缩解压相关命令介绍
linux·运维·服务器
汤愈韬30 分钟前
OSPF外部路由引入
网络·网络协议
KCENN43 分钟前
安全地毯压敏感应技术在工业流水线与机器人防护领域的选型部署要点
安全
云飞云共享云桌面1 小时前
非标自动化工厂研发部门怎么实现一台服务器带10个SolidWorks设计并发
运维·服务器·人工智能·3d·自动化·电脑·制造
Lzg_na1 小时前
OSPF协议学习
网络
校园安全大脑平台1 小时前
学校原有监控摄像头怎么接入 AI 安全平台?利旧改造的条件核对清单
人工智能·安全
遇见小修修1 小时前
打印机无法连接故障:操作误区汇总与排查教程
运维·服务器
每天一道题1 小时前
分布式锁真的安全吗?从 Redis 锁、Lease 到 Fencing Token
redis·分布式·安全
Elastic 中国社区官方博客1 小时前
使用 OpenTelemetry 在 Elastic 中实现 Claude 平台的人工智能 agent 可观测性
大数据·运维·服务器·人工智能·elasticsearch·信息可视化·全文检索