登入 註冊
 

ecshop補丁模板限制PHP執行
閱讀 1428 次 0 會員 與 1 訪客 正在閱讀本文。
十二月 07, 2012, 11:20:27 上午
在20121106發佈的補丁中
對模板執行PHP做了限制
也就是說
未來的版本中,將無法在模板中直接加入PHP程式碼
防止駭客利用遠端執行PHP程式碼
這樣對網站安全便多了一層保護
但是有些人在修改模版時加入了PHP程式碼
如果補丁或升級肯定影響前台原有功能
不補丁或升級又會使網站有安全顧慮
因此還是建議將PHP程式碼獨立出來並進行補丁...
使用本站freecolor模版的用戶不受影響請放心補丁

底下為捕丁位置:
檔案:cls_template.php    約282行
代碼: [選擇]
if (!defined('ECS_ADMIN'))
        {
            $source = $this->smarty_prefilter_preCompile($source);
        }
下一行
代碼: [選擇]
版本:    272
    return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
版本:    273
    $source = preg_replace("/<\?[^><]+\?>|<\%[^><]+\%>|<script[^>]+language[^>]*=[^>]*php[^>]*>[^><]*<\/script\s*>/iU", "", $source);
        return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
改為
代碼: [選擇]
///////////20121106
        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);
                 ///////////////200121106

記錄