thinkphp是国内的一款php框架,也有一大批网站在用这个框架了。
但是总觉得thinkphp团队并没有对其进行严格的测试,在使用过程中问题频出。
最近thinkphp团队推出了基于该框架的cms系统onethink,试用了一下,刚开始在安装的时候就出现了问题。
在linux版本下,onethink在检测文件目录权限时,文件夹没有写权限,却被判为了不存在。
/**
* 目录,文件读写检测
* @return array 检测数据
*/
function check_dirfile(){
$items = array(
array('dir', '可写', 'success', './Uploads/Download'),
array('dir', '可写', 'success', './Uploads/Picture'),
array('dir', '可写', 'success', './Uploads/Editor'),
array('dir', '可写', 'success', './Runtime'),
array('dir', '可写', 'success', './Application/User/Conf'),
array('file', '可写', 'success', './Application/Common/Conf/config.php'),
);
foreach ($items as &$val) {
if('dir' == $val[0]){
if(!is_writable(INSTALL_APP_PATH . $val[3])) {
if(is_dir($items[1])) {
$val[1] = '可读';
$val[2] = 'error';
session('error', true);
} else {
$val[1] = '不存在';
$val[2] = 'error';
session('error', true);
}
}
} else {
if(file_exists(INSTALL_APP_PATH . $val[3])) {
if(!is_writable(INSTALL_APP_PATH . $val[3])) {
$val[1] = '不可写';
$val[2] = 'error';
session('error', true);
}
} else {
if(!is_writable(dirname(INSTALL_APP_PATH . $val[3]))) {
$val[1] = '不存在';
$val[2] = 'error';
session('error', true);
}
}
}
}
return $items;
}
在上述代码的foreach循环中,判断文件夹是否有写权限当然不能用一个is_dir($items[1])了,应该判断该文件是否是文件夹并具可写权限。
is_dir(INSTALL_APP_PATH . $val[3]) && is_writable(INSTALL_APP_PATH . $val[3])
当然还有很多其它好玩的东西,后期可以展示给大家。
怎么样,是不是有点Damn Vulnerable Linux的味道,试试吧,你会爱上它的。