关于OneThink 1.0.131129开发版的安装检测文件权限bug

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的味道,试试吧,你会爱上它的大笑


你可能感兴趣的:(框架,linux,PHP,测试,thinkphp)