找回密码
 注册
首页 ≡≡网络技术≡≡ PHP语言 Veno-File-Manager (VFM4)云盘让游客只可查看公共文件夹 ...

CMS Veno-File-Manager (VFM4)云盘让游客只可查看公共文件夹的方法

灰儿 2022-8-31 17:58:14
Veno-File-Manager (VFM V4.07)云盘让游客只可查看公共文件夹的方法

存在漏洞:
极简云盘 Veno-File-Manager (VFM) 3.75-V4.07 版本,如果游客开启了“查看文件”权限,即使关闭了“查看文件夹”功能,游客不仅能看到根目录下的所有文件,通过在URL地址栏中手工添加“?dir=uploads/子文件夹名称”参数也可以看到子文件夹里内容,包括用户私有文件夹的内容,造成游客的权限过大,起不到保护用户私有文件的目的。

解决思路:
修改未登录用户,即游客的防问权限,只能访问公共目录(public_dirs)里的内容,不权限也无权访问用户私有文件夹。

解决方法:
1.新增一个公共目录(public_dirs)数组配置
打开 根目录/vfm-admin/config-master.php 文件,新添一个 'public_dirs'数组配置参数,代码如下:

  1.   'public_dirs' =>
  2.   array (
  3.     0 => 'public',
  4.     1 => 'temp',
  5.   ),
复制代码

2.修改class.gatekeeper.php文件
打开 主目录/vfm-admin/class/class.gatekeeper.php文件,查找 getUserInfo($info) 函数,大概在257行左右,代码如下:
  1.         /**
  2.          * Get user info ('name', 'role', 'dir', 'email')
  3.          *
  4.          * @param int $info index of corresponding user info
  5.          *
  6.          * @return info requested
  7.          */
  8.         public function getUserInfo($info)
  9.         {
  10.             if ($this->isUserLoggedIn()
  11.                 && isset($_SESSION['vfm_user_name'])
  12.                 && strlen($_SESSION['vfm_user_name']) > 0
  13.             ) {
  14.                 $username = $_SESSION['vfm_user_name'];
  15.                 $curruser = $this->getCurrentUser($username);

  16.                 if (isset($curruser[$info]) && strlen($curruser[$info]) > 0) {
  17.                     return $curruser[$info];
  18.                 }
  19.             }
  20.             return null;
  21.         }
复制代码

在此类内对象方法  getUserInfo($info) 函数中添加未登录用户(游客)可访问公共目录(public_dirs)内容,修改后代码如下:
  1.         /**
  2.          * Get user info ('name', 'role', 'dir', 'email')
  3.          *
  4.          * @param int $info index of corresponding user info
  5.          *
  6.          * @return info requested
  7.          */
  8.         public function getUserInfo($info)
  9.         {
  10.                         global $setUp;
  11.             if ($this->isUserLoggedIn()
  12.                 && isset($_SESSION['vfm_user_name'])
  13.                 && strlen($_SESSION['vfm_user_name']) > 0
  14.             ) {
  15.                 $username = $_SESSION['vfm_user_name'];
  16.                 $curruser = $this->getCurrentUser($username);

  17.                 if (isset($curruser[$info]) && strlen($curruser[$info]) > 0) {
  18.                     return $curruser[$info];
  19.                 }
  20.             }
  21.                          //游客可访问公共目录(public_dirs)内容
  22.                          else  {
  23.                                 $public_dirs = $setUp->getConfig('public_dirs');
  24.                                 $public_dirs = '["' . join('","', array_values($public_dirs) ) . '"]';
  25.                                 return $public_dirs;                                          
  26.                             }
  27.             return null;
  28.         }
复制代码

注:
用此方法修改后,存在一个问题,游客只能查看和公共目录下的文件,不显示“分享”按钮。
解决方法如下:
http://www.admin365.cn/thread-46413-1-1.html   
Veno-File-Manager (VFM4)云盘游客文件分享按钮不显示解决办法




灰儿 楼主 2022-8-31 18:18:30
http://www.admin365.cn/thread-45934-1-1.html  Veno-File-Manager (VFM3)云盘游客可查看所有文件漏洞解决方法
您需要登录后才可以回帖 登录 | 注册
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。