一、为什么会出现这个问题?
这是因为开启了主页/帖子页文件缓存,然后搜索表单的 formhash 也会被缓存,就会导致后面的游客 formhash 与当前不一致。
由于 Discuz! X 的 Xss 安全机制,会对搜索内容进行安全检查,如果 formhash 不一样,就会出现 "您当前访问请求中含有非法字符",已被系统拒绝" 。
二、如何解决?
解决方案:将这个提示改为跳转到 search.php 如果你启用了游客搜索,就会跳转到 search.php 页面,没有没有开启游客搜索,就会提示登陆。
打开/source/class/discuz/discuz_application.php
查找- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash())
复制代码 修改成如下:- if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
- if(CURSCRIPT == search && !$_G['uid']){ //判断是否是游客 是否是搜索页
- header("Location: https://".$_SERVER['HTTP_HOST']."/search.php"); // 302 跳转到 search.php
- }
- else{
- system_error('request_tainting');
- }
- }
复制代码 修改后如图:
|