open_basedir允许包含“可信”代码

时间:2014-06-07 13:51:18

标签: php open-basedir

我正在编写一个应用程序,我希望允许一些用户在我的服务器上编写/运行/测试他们的代码,并从我的应用程序中预加载一些代码。我希望这些用户只能在他们的目录中工作,这个任务可以使用open_basedir();完成,但问题是,如果我想要包含我的应用程序的代码,我会被权限拒绝如果requireinclude位于functionclass内,那么在调用open_basedir之前不会包含该文件。

示例:

<?php

function test()
{
    require 'test.php';
}

test(); // ok

ini_set('open_basedir', 'users/username/');

test(); // permission denied

是否有可能允许&#34;信任&#34;要包含的应用程序的代码但不允许用户的代码访问其他目录?如果有可能,给我一个例子或主要想法,我将如何解决这个问题,即使这与open_basedir()无关

在我的例子中,我希望不会被拒绝。这样我就可以为我的应用程序添加一些很棒的功能。

另一个例子:

spl_autoload_register(function($class) {
    require $class . '.php';
});

ini_set('open_basedir', 'folder/');

new Test(); // Warning: require(): open_basedir restriction in effect.

1 个答案:

答案 0 :(得分:0)

好吧,如果没有其他解决方案,我会展示自己的解决方案。

我确信这不是最好的方法,但它按预期工作。

首先,我可以选择编写/运行自定义代码的所有用户都必须将其上传到我的服务器,或者将其写在网站上(然后保存),所以我必须检查代码只有在保存之前,才能模仿沙盒,并对我的应用程序进行抽象化。接下来我将在沙盒中运行该代码(具有修改的open_basedir限制)并且如果代码没有致命错误(并且它没有修改工作目录中的另一个文件[如果修改,那么这些文件也将被检查])那么它将是保存。之后,用户可以选择在实际应用程序中运行代码。

缺点:

  • 整个应用程序的抽象化(应用程序结构的每次更改)

优点:

  • 允许第三方代码仅访问您想要的文件/功能/类
  • 阻止功能/方法未知代码不应访问
  • 安全地执行未知代码
  • 无需在每次执行时检查代码
  • 无需外部库