PHP.INI设置禁用exec,shell_exec,system,popen和其他功能以提高安全性
我运行一台基于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 # <- CentOS/RHEL 7.x $ sudo systemctl restart php7.0-fpm.service # <- Ubuntu/Debian