我使用nginx和php-fpm作为默认的webserver而没有apache。 因此,为了获得最佳安全性,每个主机都有自己的php-fpm池。
我再次遇到shell_exec的问题 - 我不想为所有用户启用,但我需要将此功能用于某些主机(1或3台主机,不再需要)。
在php.ini中关闭shell_exec。 我尝试在站点php-fpm池中启用shell_exec,但它不起作用:
php_admin_value[shell_exec] = on
答案 0 :(得分:1)
要考虑的其他因素是禁用主disable_function
文件中的php.ini
。
然后为每个FPM池设置disable_function
:(例如)
php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
如果您有一个特定的FPM池需要使用其中一个或多个功能,只需将其从该池配置中删除即可。
答案 1 :(得分:0)
您可以创建白名单IP主机:
$whitelist = array('127.0.0.1', '192.168.0.1', 'whateverIPyouAuth');
if(in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
//shell_exec call here
}
答案 2 :(得分:0)
您可以suhosin.executor.func.blacklist
1)在php.ini中评论disable_function
2)在下面添加此行(列出所有要列入黑名单的函数。名为disable_function)
suhosin.executor.func.blacklist = exec, passthru, shell_exec, system, proc_open, popen, apache_child_terminate, apache_setenv, define_syslog_variables,
pcntl_exec, openlog, posix_getpwuid, posix_kill, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname,
proc_close, proc_get_status, proc_open, proc_terminate, syslog, curl_exec, curl_multi_exec, php_uname, phpinfo
3)在虚拟主机部分中使用以下行:
php_admin_value suhosin.executor.func.blacklist ".."
因此,您可以重新定义该特定虚拟主机的黑名单功能。
在您的情况下,除shell_exec
以外的所有功能。
这将是php_admin_value suhosin.executor.func.blacklist "passthru, shell_exec, system, proc_open, popen, apache_child_terminate, apache_setenv, define_syslog_variables,
pcntl_exec, openlog, posix_getpwuid, posix_kill, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname,
proc_close, proc_get_status, proc_open, proc_terminate, syslog, curl_exec, curl_multi_exec, php_uname, phpinfo"