0

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

例子 :

<?php

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

test(); // ok

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

test(); // permission denied

是否有可能以某种方式允许包含应用程序的“受信任”代码但不允许用户的代码访问其他目录?如果可能,请给我一个示例或主要想法,说明如何解决此问题,即使这与 open_basedir() 无关

在我的示例中,我不希望权限被拒绝。这将使我有可能为我的应用程序添加一些很棒的功能。

另一个例子 :

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

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

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

1 回答 1

0

好吧,如果没有其他解决方案,我将提出我自己的解决方案。

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

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

缺点:

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

优点:

  • 允许第三方代码仅访问您想要的文件/函数/类
  • 阻止功能/方法未知代码不应访问
  • 安全执行未知代码
  • 无需在每次执行时检查代码
  • 不需要外部库
于 2014-06-07T17:33:48.397 回答