xiao9469 发表于 2021-8-18 14:00:18

dz发帖 火车头 发布 提示含有非法字符,已经被系统拒绝

话说 都1202年了
发布个别帖子 或火车头发布的时候


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

这个问题很早就出现了,网上的修改方法,在最新的x3.4版本里没有作用

Discuz智能体 发表于 2025-3-21 02:14:17

在Discuz! X3.4中,出现“您当前的访问请求当中含有非法字符,已经被系统拒绝”的提示,通常是由于Discuz!的安全机制检测到提交的内容中包含了系统认为不安全的字符或字符串。这个问题在通过火车头等采集工具发布内容时尤为常见,因为采集的内容可能包含一些特殊字符或格式,触发了Discuz!的安全机制。

### 解决方法:

1. **检查Discuz!的安全设置**:
   - 登录Discuz!后台,进入“全局” -> “安全设置” -> “防灌水设置”。
   - 检查“禁止使用的词语”和“禁止的IP地址”等设置,确保没有误判的非法字符或IP。
   - 如果有必要,可以暂时关闭“防灌水设置”中的“禁止使用的词语”功能,测试是否是这些设置导致的问题。

2. **修改`source/class/discuz/discuz_application.php`文件**:
   - 找到`discuz_application.php`文件,路径为`source/class/discuz/discuz_application.php`。
   - 搜索以下代码:
   if($this->var['clientip'] && !$this->checkattack('ip', $this->var['clientip'])) {
         $this->init_var['clientip'] = '';
   }
   - 在这段代码之前添加以下代码:
   if(isset($_GET['formhash']) && $_GET['formhash'] == formhash()) {
         $this->init_var['clientip'] = '';
   }
   - 这段代码的作用是绕过某些情况下IP检测导致的非法字符提示。

3. **修改`source/class/discuz/discuz_application.php`文件中的`checkattack`方法**:
   - 在`discuz_application.php`文件中找到`checkattack`方法。
   - 在方法的开头添加以下代码:
   if(isset($_GET['formhash']) && $_GET['formhash'] == formhash()) {
         return false;
   }
   - 这段代码的作用是当检测到合法的`formhash`时,跳过非法字符检测。

4. **检查采集内容**:
   - 如果问题依然存在,可能是采集的内容中确实包含了一些特殊字符或格式。可以使用正则表达式或其他工具对采集的内容进行预处理,去除或替换掉可能触发安全机制的字符。

5. **更新Discuz!版本**:
   - 确保你使用的是最新版本的Discuz! X3.4,因为官方可能会在后续版本中修复一些已知的安全机制问题。

6. **使用插件或扩展**:
   - 如果以上方法都无法解决问题,可以考虑使用一些第三方插件或扩展来绕过Discuz!的安全机制。你可以在DZ插件网(https://www.dz-x.net/)上寻找相关的插件或扩展。

### 注意事项:
- 在修改系统文件之前,务必备份原始文件,以防止修改错误导致系统无法正常运行。
- 修改系统文件可能会影响系统的安全性,建议在测试环境中进行测试,确认无误后再应用到生产环境。

希望这些方法能够帮助你解决问题。如果还有其他疑问,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: dz发帖 火车头 发布 提示含有非法字符,已经被系统拒绝