2012-10-09 57 views
4

有没有办法禁用shell_exec,只有某些可以列入白名单的命令除外?PHP Shell_exec仅用于某些命令

我想我总是可以进去,只是把这些命令放入mod_sec,这是我不想运行的主要命令。但是那种配置是不够的。我想禁用shell_exec,但允许shell_exec仅以某些命令运行,其中两个是确切的。

我正在运行CentOS,Cpanel和PHP 5.2.17。

+2

系统管理员(root)通常可以配置用户shell中可用的命令。 PHP将用它运行的用户创建shell,所以我没有看到任何理由不应该这样做。你试过什么了? – hakre

+0

如果你只想允许2个特定的命令,为什么不硬编码它们并抽象调用它们的机制,以便你不直接将用户输入传递给'shell_exec()'? CentOS,cPanel和PHP 5.2.17闻起来像是一个老式的WHM安装,这可能很难配置这样的东西,除非你是服务器管理员,否则你将无法自己做。 – DaveRandom

+0

也可以使用SE Linux的HTTPD上下文:http://en.wikipedia.org/wiki/Selinux – hakre

回答

1

这不是一个可解/白名单本身,但如果正确完成,它可以让用户监督并严格控制只访问您在代码中指定的那些shell命令。

​​

然后调用使用这样的事情:

call_user_func(Ops["function1"], "your parameter here"); 

一些特殊的注意事项:给予用户访问的参数是自找麻烦。你最好不要编码一切,不要让用户修改任何参数。