如何只允许一个站点使用PHP的exec()函数

我在CentOS 7上有一个简单的Apache,mod_php服务器。我已经禁用了php.ini中的exec函数,但是我需要在一个Vhost上使用它。 现在显然我知道我不能使用多个php.ini文件,我知道我不能更改php.ini文件之外的disable_functions设置,所以我尝试了其他的想法。

显然,我的第一个select是使用fastcgi或者suPHP等,但是如果不打断服务器,我不能让它们工作,尽pipe我最终可以使它们工作,但我宁愿find一个不同的解决scheme,并坚持简单的mod_php。

我的第二个想法是安装Nginx和php-fpm并让它在另一个端口上侦听,但是尽pipe将disable_functions设置为空值,它仍然读取php.ini文件,从而禁用了php_exec函数。

那么有没有一个相对简单的方法来实现这一点,而不必重置与FastCGI的Apache?

那么我有一个很好的答案,多亏了Aaron的指点

使用这个安装Suhosin

yum安装php-devel

wget http://download.suhosin.org/suhosin-0.9.33.tgz

tar -xvf suhosin-0.9.33.tgz

cd suhosin-0.9.33

phpize

。/configuration

使

进行安装

echo'extension = suhosin.so'> /etc/php.d/suhosin.ini

服务httpd重启

yum安装php-devel

yum安装php-suhosin

将此添加到php.ini文件的底部(黑名单函数列表):

 suhosin.executor.func.blacklist = “exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source” 

最后,对于应该允许使用禁用函数的VirtualHost,添加以下内容:

 php_admin_value suhosin.executor.func.blacklist = 

Suhosin强制脚本在达到黑名单function时退出,而不是像本地禁用function设置那样忽略function。