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