admin 发表于 2020-7-8 10:46:48

"您当前访问请求中含有非法字符" 友好兼容解决方案

问题描述:由于Discuz!X 的Xss安全机制,会对游客访问时进行字符内容安全检查,特别是游客使用搜索功能时,搜索容易出现 "您当前访问请求中含有非法字符",已被系统拒绝" 。

解决方案:将这个提示改为跳转用户登录
解决步奏:打开:/source/class/discuz/discuz_application.php
搜索:
if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
                        system_error('request_tainting');
                }改为:
if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {
                        //system_error('request_tainting');
                        //header('HTTP/1.1 301 Moved Permanently');
                        header("Location: https://".$_SERVER['HTTP_HOST']."/member.php?mod=logging&action=login");
                        exit;
                }备注:https根据实际情况修改http

TyCoding 发表于 2020-7-8 10:47:47

非常感谢!

拾光 发表于 2020-7-8 10:48:22

修改后出现500错误,估计是https没修改

Crystαl 发表于 2020-7-8 10:49:19

问题是,这提示不一定是没登录,可以考虑下是不是登录状态,其实你主要应该是为了搜索

IT618发布 发表于 2020-7-8 10:49:33

我收到的主要反馈确实是 游客搜索时弹这个提示比较不人性化 所以才改这个
其他状态下 跳登录 如果已经登录 其实会只是触发非法关键字内容跳到登录状态提示~~ 就多一个提示
因为很多情况下 那个提示给用户 用户会无从入手下一步怎么弄 导致网站客服工作量增加

IT618发布 发表于 2020-7-8 10:50:14

支持楼主分享!

IT618发布 发表于 2020-7-8 10:51:06

这个解决方案应该Git上去!

IT618发布 发表于 2020-7-8 10:51:38

学习一下

拾光 发表于 2020-7-8 10:52:25

不错啊{:2_25:}

IT618发布 发表于 2020-7-8 10:52:51

这是因为开启了主页游客缓存, 然后搜索表单的hash也会被缓存, 就会导致后面的游客hash与当前不一致,

正确的做法是跳转至search.php这个页面然后让他手动去搜索, search.php这个页面不会有缓存.
页: [1]
查看完整版本: "您当前访问请求中含有非法字符" 友好兼容解决方案

创宇盾启航版免费网站防御网站加速服务