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

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

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

显然,我的第一选择是使用 fastcgi 或 suPHP 等,但是如果不破坏服务器,我就无法让它们工作,虽然我最终可以让它们工作,但我宁愿找到不同的解决方案并坚持使用简单的 mod_php。

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

那么有没有一种相对简单的方法可以实现这一点,而无需使用 fastcgi 重置 Apache?

答案1

好吧,我有一个很好的答案,感谢亚伦

使用以下方式安装 Suhosin

yum 安装 php-devel

获得http://download.suhosin.org/suhosin-0.9.33.tgz

焦油-xvf suhosin-0.9.33.tgz

cd suhosin-0.9.33

phpize

。/配置

制作

进行安装

回显'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 会强制脚本退出,而不是像本机禁用函数设置那样忽略该函数。

相关内容