本人在使用织梦dedecms建设网站的过程中,发现一个非常奇怪的问题,后台出现安全提示:强烈建议data/common.inc.php文件属性设置为644(Linux/Unix)或只读(NT);
本人按照提示使用ftp对文件权限进行修改,但是修改过后,在后台刷新一下,还是会出现修改common.inc.php文件属性的提示。在ftp刷新一下,发现此文件的属性又变为777。本人又重新修改了一下,还是会变为先前的样子。本人通过虚拟主机的后台,使用文件管理功能进行文件属性的修改,但还是先前的样子,也就是说此文件属性没有办法修改。那是怎么回事呢?是什么原因导致无法修改common.inc.php文件属性呢?
本人在网上查找解决方法,但是很多还是让修改文件的权限为644、444之类的,不过都不行。本人想可能是织梦程序本身的问题导致,于是查看织梦后台安全检查文件dede/index.testenv.php,终于发现了问题。本人的修改方法如下:
在index.testenv.php文件中查找:
if(!function_exists('IsWritable'))
{
// 检测是否可写
function IsWritable($pathfile) {
$isDir = substr($pathfile,-1)=='/' ? true : false;
if ($isDir) {
if (is_dir($pathfile)) {
mt_srand((double)microtime()*1000000);
$pathfile = $pathfile.'dede_'.uniqid(mt_rand()).'.tmp';
} elseif (@mkdir($pathfile)) {
return IsWritable($pathfile);
} else {
return false;
}
}
@chmod($pathfile,0777);
$fp = @fopen($pathfile,'ab');
if ($fp===false) return false;
fclose($fp);
$isDir && @unlink($pathfile);
return true;
}
}
此判断条件大概在115行。
在130行,chmod是修改文件权限函数,其中有个数字0777,这是文件权限。结合后面的这段代码:
if(IsWritable(DEDEDATA.'/common.inc.php'))
{
$safeMsg[] = '强烈建议data/common.inc.php文件属性设置为644(Linux/Unix)或只读(NT);';
}
common.inc.php文件的权限总是被修改为777,于是本人将函数中的数字777修改为644,如下所示:
if(!function_exists('IsWritable'))
{
// 检测是否可写
function IsWritable($pathfile) {
$isDir = substr($pathfile,-1)=='/' ? true : false;
if ($isDir) {
if (is_dir($pathfile)) {
mt_srand((double)microtime()*1000000);
$pathfile = $pathfile.'dede_'.uniqid(mt_rand()).'.tmp';
} elseif (@mkdir($pathfile)) {
return IsWritable($pathfile);
} else {
return false;
}
}
@chmod($pathfile,0644);
$fp = @fopen($pathfile,'ab');
if ($fp===false) return false;
fclose($fp);
$isDir && @unlink($pathfile);
return true;
}
}
修改过index.testenv.php文件后上传至对应位置。虽然文件common.inc.php的属性变为644限,但是后台刷新后,还是出现提示。
本人将
if(IsWritable(DEDEDATA.'/common.inc.php'))
{
$safeMsg[] = '强烈建议data/common.inc.php文件属性设置为644(Linux/Unix)或只读(NT);';
}
这段代码的if条件修改为了:if(!IsWritable(DEDEDATA.'/common.inc.php'))
刷新后台,不再出现提示,问题解决,但是并不确定这种方法是否有什么后遗症,如果大家有更好的方法,欢迎一起讨论。