You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RHEL 8升级后请求URL含特殊字符时意外重定向到根地址问题求解

你遇到的问题是RHEL 8默认集成的*mod_security(Web应用防火墙)*规则拦截了带HTML标签的查询参数,判定为XSS攻击尝试,触发了重定向/拦截逻辑,和你写的PHP代码本身无关。

可行解决方案

1. 排查验证原因(临时操作,生产环境不建议直接关闭防护)

  • 如果你用的是Apache服务:
    1. 编辑配置文件 /etc/httpd/conf.d/mod_security.conf,把SecRuleEngine On改为SecRuleEngine Off
    2. 执行systemctl restart httpd重启服务后重新测试请求,如果可以正常返回内容,即可确认是mod_security拦截导致的问题
  • 如果你用的是Nginx服务:
    1. 编辑配置文件 /etc/nginx/modsec/modsec.conf,把SecRuleEngine On改为SecRuleEngine Off
    2. 执行systemctl restart nginx重启服务后测试验证

2. 生产环境推荐方案(保留WAF防护,仅添加业务例外规则)

不要全关mod_security防护,仅针对你的业务场景添加自定义放行规则:

  1. 先查看mod_security审计日志,找到对应请求触发的拦截规则ID:
    • Apache日志路径:/var/log/httpd/modsec_audit.log
    • Nginx日志路径:/var/log/nginx/modsec_audit.log
  2. 在自定义规则目录下新建规则文件,添加如下内容(以Apache为例,规则ID可自定义,只要不与现有规则冲突即可):
# 放行指定路径下data参数的XSS标签检测规则
SecRule REQUEST_URI "@streq /你的脚本路径.php" "id:10001,phase:2,nolog,pass,ctl:ruleRemoveTargetById=你查到的拦截规则ID;ARGS:data"
  1. 重启对应的Web服务后即可生效,既保留全局WAF防护,也不影响业务功能。

3. 无服务端配置权限的替代方案

如果没有权限修改服务器配置,建议前端传参时先对参数值做URL编码,服务端PHP可以自动识别解码,不会被WAF拦截:

  • 原始参数值"<title>test</title>"编码后为%22%3Ctitle%3Etest%3C/title%3E%22,拼接后的请求地址为https://example.com?data=%22%3Ctitle%3Etest%3C/title%3E%22即可正常请求

额外提示:如果你的业务不需要输出原始HTML内容,建议输出时用htmlspecialchars($_GET['data'])处理参数,避免XSS安全风险。

内容的提问来源于stack exchange,提问作者Abdus Sattar Shohag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:45:02