在使用 Dedecms 时,可能会遇到一个与 SESSION 变量覆盖相关的 SQL 注入漏洞。该问题出现在 /include/common.inc.php 文件中,本文将详细介绍此漏洞的成因及解决方法。
补丁文件:/include/common.inc.php
漏洞描述:Dedecms 的 /plus/advancedsearch.php 文件中,直接从 SESSION[SESSION[sqlhash]] 获取值并作为 $query 带入 SQL 查询语句中执行。这种做法存在严重的安全隐患,因为如果服务器配置了 session.auto_start = 1(即启用了自动 SESSION 会话),攻击者可以轻松利用 SESSION 变量覆盖的方式注入恶意 SQL 代码。
为了解决这一问题,云盾团队已经在 Dedecms 的变量注册入口进行了通用统一防御,禁止 SESSION 变量的外部传入。以下是具体的修复步骤:
解决方法:
1、打开 /include/common.inc.php 文件,搜索以下代码(通常位于第 68 行):
if( strlen($svar) > 0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#', $svar) )
2、将上述代码替换为以下内容:
if( strlen($svar) > 0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE|_SESSION)#', $svar) )
3、保存修改后的文件,并将其上传到阿里云服务器上,覆盖原有的 /include/common.inc.php 文件。
注意事项:
在进行任何修改之前,请务必备份原始文件,以防止意外情况导致系统无法正常运行。此外,建议定期检查网站的安全性,及时更新 CMS 系统及相关插件,避免因版本过旧而引发的安全风险。
通过以上方法,您可以有效防止 Dedecms 中因 SESSION 变量覆盖而导致的 SQL 注入问题。确保您的网站更加安全可靠。