织梦 include/common.inc.php 里的 CheckRequest 变量过滤函数,会拦截以 cfg_ 开头、GLOBALS 等关键字的外部提交变量;后台新增变量提交时的 nvarname 参数被遍历检查,触发正则匹配拦截,直接退出并提示 Request var not allow!
修复步骤(先备份原文件!)
-
打开文件:
include/common.inc.php,找到CheckRequest函数原始代码
function CheckRequest(&$val) {
if (is_array($val)) {
foreach ($val as $_k=>$_v) {
CheckRequest($_k);
CheckRequest($val[$_k]);
}
} else
{
if( strlen($val)>0 && preg_match('#^(cfg_|GLOBALS)#',$val) )
{
exit('Request var not allow!');
}
}
}
-
修改数组遍历部分,增加
nvarname跳过判断:
function CheckRequest(&$val) {
if (is_array($val)) {
foreach ($val as $_k=>$_v) {
if($_k == 'nvarname') continue;
CheckRequest($_k);
CheckRequest($val[$_k]);
}
} else
{
if( strlen($val)>0 && preg_match('#^(cfg_|GLOBALS)#',$val) )
{
exit('Request var not allow!');
}
}
}
- 保存文件,上传覆盖,清除浏览器缓存,重新进入后台添加变量即可正常提交
补充说明
- 本质是针对性跳过后台新增变量提交的 nvarname 参数检查,不改动整体安全过滤规则,相比直接删除 / 修改正则更安全
- 不要直接乱改正则匹配语句,会造成网站安全隐患
- 新增自定义变量时,变量名本身仍遵循规范(可正常用 cfg_前缀),仅放行提交参数本身的校验遍历
- 若修改后仍异常:确认编码为 UTF-8 无 BOM 格式、检查是否存在其他版本 / 缓存文件
验证
修改完成后进入织梦后台:系统 → 系统基本参数 → 添加新变量,即可正常保存,不再报错
完整伪静态配置、后台报错修复、二次开发教程,请到技术主站查:
艾立兹站 aliz.cn

