自从ECSHOP2.7.3起模板不再支持php代码。如何解决?

本文介绍如何在ECSHOP 2.7.3中安全地禁用模板内的PHP代码执行,以防被恶意利用。通过修改cls_templage.php文件中的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自从ECSHOP2.7.3起模板不再支持php代码。如何解决?

时间:2013-10-16 15:32:24 来源: 模板城 作者:清风 点击: 1681
自从ECSHOP2.7.3起模板不再支持php代码。如何解决?其实是ECSHOP模板解析时过滤了PHP代码。整个重点主要是改includes目录下的cls_templage.php这个文件,ECshop的模板是支持php代码的,主要是为了防范挂...

自从ECSHOP2.7.3起模板不再支持php代码。如何解决?

其实是ECSHOP模板解析时过滤了PHP代码。整个重点主要是改includes目录下的cls_templage.php这个文件,

ECshop的模板是支持php代码的,主要是为了防范挂马,这个给一些不法分子创造了挂马的机会,这些不法分子挂马步骤很可能是:

1、通过ecshop的漏洞搞SQL注入,暴出管理员密码md5值,然后通过**md5得到管理密码。(注:防止暴出管理密码md5值的方法是关闭 display_errors,并且修改cls_mysql.php里的ErrorMsg函数,注释掉所有错误输出代码或把错误写入文件)

2、进入管理后台,通过模板管理->库项目管理,编辑lbi文件,添加php代码,例如<?php @eval($_POST['lx']);?>

3、到这里,就完全控制这个站了,想挂什么马就挂什么马。

可见,ECshop的模板支持php代码这点是非常危险的,因此我们应该过滤模板里的所有php代码。

方法如下:

1、修改cls_templage.php文件,添加函数:

function delete_php_code($content)
{
if(!empty($content))
{
$pattern='/<?(.|rn|s)*?>/U';

return preg_replace($pattern,'',$content);
}
}
2、第165行$out = $this->_eval($this->fetch_str(file_get_contents($filename)));修改为:

$out = $this->_eval($this->fetch_str($this->delete_php_code(file_get_contents($filename))));
3、第260行$source = $this->fetch_str(file_get_contents($filename));修改为:

$source = $this->fetch_str($this->delete_php_code(file_get_contents($filename)));
这样,模板里的php代码就被过滤掉了。


    function fetch_str($source)
    {
        if (!defined('ECS_ADMIN'))
        {
            $source = $this->smarty_prefilter_preCompile($source);
        }
        $source=preg_replace("/([^a-zA-Z0-9_]{1,1})+(copy|fputs|fopen|file_put_contents|fwrite|eval|phpinfo)+( |\()/is", "", $source);
        if(preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php[\"\']?)~is', $source, $sp_match))
        {
            $sp_match[1] = array_unique($sp_match[1]);
            for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++)
            {
                $source = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$source);
            }
             for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++)
            {
                 $source= str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '<?php echo \''.str_replace("'", "\'", $sp_match[1][$curr_sp]).'\'; ?>'."\n", $source);
            }
         }
         return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
    }



2.73 增加了额

        $source=preg_replace("/([^a-zA-Z0-9_]{1,1})+(copy|fputs|fopen|file_put_contents|fwrite|eval|phpinfo)+( |\()/is", "", $source);
        if(preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php[\"\']?)~is', $source, $sp_match))
        {
            $sp_match[1] = array_unique($sp_match[1]);
            for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++)
            {
                $source = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$source);
            }
             for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++)
            {
                 $source= str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '<?php echo \''.str_replace("'", "\'", $sp_match[1][$curr_sp]).'\'; ?>'."\n", $source);
            }
         }



解决方法 利用 insert_functionname



一、修改数据库连接: \data\config.php 文件;如下所示:【加黑字体是说明】 <?php // database host $db_host = "localhost"; 填写数据库地址,可以是IP; // database name $db_name = "xxxxx"; 这里是数据库名 // database username $db_user = "xxxxx"; 数据库用户名 // database password $db_pass = "xxxxx"; 数据库密码 // table prefix $prefix = "xh_"; 数据库表前缀, $timezone = "PRC"; $cookie_path = "/"; $cookie_domain = ""; $session = "1440"; define(&#39;EC_CHARSET&#39;,&#39;utf-8&#39;); 编码类型 define(&#39;ADMIN_PATH&#39;,&#39;ad-xh&#39;); 后台路径 define(&#39;AUTH_KEY&#39;, &#39;this is a key&#39;); 注明:如果数据库和空间地址一致,可以在数据库地址处填写localhost;数据库表前缀如若更换,在此处更改后,必须结尾加_ 还要在数据库文件中批量挑换对应的表前缀,可以使用TXT和dreamweaver批量替换,不会的自己百度,基本的东西!后台路径修改可以在安装成功后修改,这里修改后,比如是admin 还要把根目录下 的对应的文件夹重命名为admin 方可! 数据库链接文件修改好后,导入数据库,可以使用数据库控制面板导入,也可以使用phpmyadmind导入! 以下是使用的一些技巧,可以看看,在这里说下,ecshop是个功能很大的商城系统,如果是你想好好的使用这个建个网站,建议您认真看看这个后台,操作试试,最好不要什么都询问我们技术,不是说想给我们的售后打折,主要是因为,你以后要维护这个网站,自己熟悉,好维护的,等你要是网站有了数据了,因为你的不熟悉导致的数据丢失,你就哭都找不到北了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值