PHP.INI设置禁用exec,shell_exec,system,popen和其他功能以提高安全性

时间:2020-01-09 10:42:02  来源:igfitidea点击:

我运行一台基于Apache的小型Web服务器供个人使用,并且与朋友和家人共享。
但是,大多数脚本小子都尝试使用exec(),passthru(),shell_exec(),system()函数来开发WordPress等PHP应用程序。
如何禁用这些功能以提高我的PHP脚本安全性?

PHP有很多功能,如果使用不当,它们可以用来破解服务器。
您可以使用disable_functions指令在php.ini中设置功能列表。
该指令允许您出于安全原因禁用某些功能。
它采用以逗号分隔的函数名称列表。

disable_functions不受安全模式的影响。

该指令必须在php.ini文件中设置。
例如,您不能在httpd.conf文件中进行设置。
该页面显示了如何编辑php.ini以禁用某些功能并重新启动所需的服务。

PHP.INI设置禁用exec,shell_exec,system,popen和其他功能以提高安全性

使用ssh命令打开终端应用程序或者通过ssh会话登录到服务器。
使用文本编辑器(例如vim命令或者nano命令)打开php.ini文件:

$ sudo vi /etc/php.ini

或者

$ sudo nano /etc/php.ini

查找disable_functions并设置新列表,如下所示:

# list of function to disable globally #
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

出于安全原因,我还建议禁用allow_url_include和allow_url_fopen:

allow_url_fopen=Off
allow_url_include=Off

保存并关闭文件。
通过执行以下命令来重新启动httpd服务器:

# service httpd restart

或者,如果您使用的是Debian/Ubuntu Linux,请运行:

# service apache2 restart

关于基于系统的系统的说明

如果您使用的是systemd +基于RHEL/CentOS/Fedora Linux的系统,请执行:

# systemctl httpd restart

如果您使用的是systemd +基于Debian/Ubuntu Linux的系统,请执行:

# systemctl restart apache2

关于在Debian/Ubuntu/CentOS Linux下的PHP-fpm的说明

创建一个名为security.ini /etc/php/7.0/fpm/conf.d/的文件:

$ vi sudo /etc/php/7.0/fpm/conf.d/99-security.ini

追加以下设置:

# disable functions 
disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

使用vim文本编辑器时,保存并关闭文件。
接下来,您需要重新启动php-fpm/php7.0-fpm/php5.0-fpm服务服务,运行:

$ sudo systemctl restart php-fpm # &lt- CentOS/RHEL 7.x
$ sudo systemctl restart php7.0-fpm.service # &lt- Ubuntu/Debian