解決ecshop模板不支持php代碼,修改ecshop過(guò)濾模板php代碼!
ECshop的模板是支持php代碼的,主要是為了防范掛馬,這個(gè)給一些不法分子創(chuàng)造了掛馬的機(jī)會(huì),這些不法分子掛馬步驟很可能是:
1、通過(guò)ecshop的漏洞搞SQL注入,暴出管理員密碼md5值,然后通過(guò)**md5得到管理密碼。(注:防止暴出管理密碼md5值的方法是關(guān)閉display_errors,并且修改cls_mysql.php里的ErrorMsg函數(shù),注釋掉所有錯(cuò)誤輸出代碼或把錯(cuò)誤寫入文件)
2、進(jìn)入管理后臺(tái),通過(guò)模板管理->庫(kù)項(xiàng)目管理,編輯lbi文件,添加php代碼,例如<?php @eval($_POST['lx']);?>
3、到這里,就完全控制這個(gè)站了,想掛什么馬就掛什么馬。
可見(jiàn),ECshop的模板支持php代碼這點(diǎn)是非常危險(xiǎn)的,因此我們應(yīng)該過(guò)濾模板里的所有php代碼。
方法如下:
1、修改cls_templage.php文件,添加函數(shù):
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代碼就被過(guò)濾掉了。
新聞熱點(diǎn)
疑難解答
圖片精選