2016-08-18 78 views
0

林试图找出是否有办法,我可以允许通过允许的open_basedir路径包括文件复制到的open_basedir之外的某个目录,但在同一时间,防止fopen,file_get_contents等打开这些目录中的文件。允许从目录包括但防止FOPEN到同一位置

这样做是为了防止恶意用户窃取源代码的平台,他们只许可使用,并将其移动到不同的服务器,而无需授权。

由于帐户chroot的,他们不能运行了shell_exec系统命令或以其他方式从shell访问这些文件,但是因为我必须让他们开BASEDIR包括的文件,有人可以编写一个脚本来复制的文件结构包含本地帐户的路径,然后ftp下来。

我想,以防止被可能的,如果可能的话。

禁用fopen等不是一个选项。

+0

两者都读访问您的服务器上安装PHP,所以我怀疑你能做到这一点。如果您的目标是安全,您可以创建一个本地主机REST服务供他们访问? –

+0

不可能。 'include'基本上是'$ code = file_get_contents(...); eval($ code)'和'file_get_contents()'基本上只是'fopen();的fread(); FCLOSE();'。有没有办法区分“打开运行代码”和“打开复制代码” –

+0

另一个想法 - 你可能会编辑PHP源代码,并重新编译它在你的服务器上引发异常,当用特定的路径模式调用fopen ,这里:https://github.com/php/php-src/blob/master/main/fopen_wrappers.c –

回答

1

这里有一个长镜头:

  1. 下载PHP SRC:https://github.com/php/php-src/

  2. 修改php_check_specific_open_basedir功能https://github.com/php/php-src/blob/master/main/fopen_wrappers.h

要加入这一行,返回-1时您的路径被访问:

PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path) 
{ 
    if (basedir == '/path/to/your/protected/area/') { 
     return -1; 
    } 
  • 然后使/建设/与你的src编辑
  • +0

    这是一个好主意,虽然我不确定它是否适合我, m使用简单的apache管理的托管cpanel托管帐户。我会把它放在后面的口袋里,以备后用。这将是很好,如果PHP的神只会添加此功能可配置在php.ini文件;) – SublymeRick

    +0

    这仍然允许包括工作? – SublymeRick

    +0

    @SublymeRick我不能肯定地说,因为它是你触摸的低级代码。然而,在我看来,它仍然可以工作,因为PHP'include'会使用C的'fopen'而不是PHP封装它。 –

    相关问题