我想允许用户在我的网页上使用php创建自己的应用程序。问题是他们可以访问一些危险的命令,如chmod()
。我不知道该怎么做。
我想用eval()
运行他们的应用程序,但我不知道很多危险的命令,我想阻止使用它们中的任何一个。因此,当代码中存在危险内容时,是否有人可以创建运行die()
的函数?或者可能会提供一些用户无法运行的命令列表?
编辑:我不想禁用eval()
。我想阻止用户使用可能危及网站的功能。
编辑:由于我正在使用子域名,因此我无权访问php.ini
,整个域名只有一个php.ini
。而且我不想为整个站点禁用命令,只是为了一个eval ......
答案 0 :(得分:1)
别。没有办法安全地做到这一点。
PHP不是为此应用程序设计的。它无法在运行时过滤函数调用。
过滤用户生成的代码也不太可能有效。有许多微妙的方法可以绕过所有明显的过滤方法 - 例如,可以使用间接函数调用语法隐藏函数调用:
$fn = "system";
$fn("evil command");
或使用您可能没有意识到的命令等同于eval
,例如某些版本的PHP中的assert
,create_function
甚至preg_exec
。
答案 1 :(得分:0)
一般来说,eval()
不是最佳选择,对于大多数情况,人们应该尝试其他方式(When is eval evil in php?)。
考虑到上述情况,可以创建一个(几乎)安全的环境。
您应该创建一个权限非常低的用户,并授予他仅在特定文件夹中读/写的权限。然后以此用户身份运行用户的php代码:这不会阻止错误的函数,但会将它们限制在某种沙箱中。
但是,正如 duskwuff 指出的那样,php并没有考虑到这一点,所以要小心!
我说几乎是因为在机器上运行任意代码是不安全的,它可能不安全。
编辑1:查看此链接:https://github.com/Corveda/PHPSandbox
编辑2:其他链接:Is there a way to execute php code in a sandbox from within php