如何更改某些代码的主目录?

时间:2016-04-30 09:32:01

标签: php

我在网上找到了一些PHP(它是一个没有权限的1页文件管理器),我发现它真的很棒,它适合我目前的需求。但是,我在更改工作(默认)目录时遇到了一些问题。

我从不再维护的GitHub项目中获取了脚本。 PHP本身是一个1页的PHP文件管理器,没有权限,没有数据库等。我已经有一个用户帐户系统,并希望根据现有的数据库变量更改工作目录,但我似乎无法找到一种改变目录的方法。

目前,脚本已上传到/home/advenacm/public_html/my/(因为文件为/home/advenacm/public_html/my/files.php。据我所知,PHP使用cookie来确定工作目录,但它不能找到一种设置自定义目录的方法。我想使用'/home/advenacm/public_html/my/'.$userdomain;,结果会变成/home/advenacm/public_html/my/userdomain.com/

我想要做的是设置默认(或" home")目录,以便文件管理器无法访问根目录,只能访问指定的子文件夹。

directory = "/home/advenaio/public_html/directory/"之类的东西是解释它的最好方法。我已经尝试了许多方法来尝试实现这一目标,但似乎没有任何效果。

我已经冒昧地将我的代码上传到pastebin并使用PHP语法高亮显示。以下是我认为正在选择工作目录的PHP片段(第19-29行):

$tmp = realpath($_REQUEST['file']);
if($tmp === false)
    err(404,'File or Directory Not Found');
if(substr($tmp, 0,strlen(__DIR__)) !== __DIR__)
  err(403,"Forbidden");
if(!$_COOKIE['_sfm_xsrf'])
    setcookie('_sfm_xsrf',bin2hex(openssl_random_pseudo_bytes(16)));
if($_POST) {
    if($_COOKIE['_sfm_xsrf'] !== $_POST['xsrf'] || !$_POST['xsrf'])
        err(403,"XSRF Failure");
}

我感谢任何人都可以提供给我的任何帮助,并且愿意提前感谢任何人花时间看我的问题。

1 个答案:

答案 0 :(得分:0)

您是否尝试过chdir()功能?

稍后修改
根据您编辑的问题更新我的答案。

主要问题是第30行

$file = $_REQUEST['file'] ?: '.';

这需要是文件的完整真实路径,并且必须与用户的主页进行比较。< 你应该使用相同的路径进行第19行的检查。 所以你可以用以下内容替换19-30:

$user_home = __DIR__ . "/{$userdomain}";

$file = $_REQUEST['file'] ?: $user_home; //you might have to prepend $userdomain to $_REQUEST['file'], can't see from html the format.
$file = realpath($_REQUEST['file']);

if($file === false) {
    err(404,'File or Directory Not Found');
}

if(strpos($file, $user_home) !== 0) {
    err(403,"Forbidden");
}

if(!$_COOKIE['_sfm_xsrf']) {
    setcookie('_sfm_xsrf',bin2hex(openssl_random_pseudo_bytes(16)));
}

if($_POST) {
    if($_COOKIE['_sfm_xsrf'] !== $_POST['xsrf'] || !$_POST['xsrf'])
        err(403,"XSRF Failure");
}

虽然这可能会解决您的问题,但我认为整个脚本编写得很糟糕。