PHP.ini 中应禁用的高危函数(disable_functions)优化版教程

0
10

PHP.ini 中应禁用的危险函数(disable_functions)

这些函数通常用于执行系统命令、操作系统文件、建立系统级连接等。在 共享服务器、生产环境、虚拟主机、网站托管、云服务器 中,为了防止 PHP 被利用执行恶意代码,建议统一禁用。

⚠️ 注意:禁用后某些程序(如 WordPress、Discuz、Laravel 工具)可能依赖部分函数。
请按需启用/禁用。


一、PHP 中常见的高危函数及说明

以下列出常见的高危函数,按“危险等级”分类,并附上用途说明。


1. 命令执行类(高危 ★★★★★

这些函数可以直接执行系统命令,是黑客最常利用的突破点。

函数说明危险等级
exec()执行系统命令,返回结果★★★★★
system()执行命令并输出结果★★★★★
passthru()执行命令并输出 raw 结果★★★★★
shell_exec()执行系统 Shell 命令★★★★★
popen()执行命令并返回文件指针★★★★★
proc_open()打开系统进程★★★★★
proc_get_status()获取由 proc_open 创建的进程状态★★★★★

2. 文件属主/权限/链接操作类(高危 ★★★★☆

会影响系统文件安全。

函数说明危险等级
chroot()改变 PHP 进程根目录★★★★☆
chgrp()修改文件所属组★★★★☆
chown()修改文件所有者★★★★☆
symlink()创建符号链接★★★★☆
readlink()读取符号链接内容★★★☆☆

3. Socket / 网络类(高危 ★★★★☆

可创建反向 shell、监听端口等。

函数说明危险等级
stream_socket_server()创建 socket 服务器★★★★☆
pfsockopen()创建持久 socket 连接★★★★☆

4. PHP 环境修改类(高危 ★★★★☆

可任意改变 PHP 的运行环境,容易被利用进行提权操作。

函数说明危险等级
ini_set()修改 PHP 配置★★★★☆
ini_restore()恢复配置★★★★☆
ini_alter()ini_set 别名★★★★☆

5. 动态加载模块类(高危 ★★★★★

函数说明危险等级
dl()运行时动态加载 PHP 扩展★★★★★

6. 系统信息类(中危 ★★★☆☆

函数说明危险等级
phpinfo()输出 PHP 环境信息(可泄露敏感信息)★★★☆☆
syslog()写系统日志★★★☆☆
scandir()列出目录内容★★★☆☆

7. 其他功能性但存在漏洞历史的函数

函数说明危险等级
putenv()修改系统环境变量(曾被利用执行系统命令)★★★★☆
error_log()某些旧版本可绕过 safe_mode★★☆☆☆

二、如何在 php.ini 中禁用这些函数

  1. 编辑 PHP 配置文件(一般是:/etc/php.ini/etc/php/7.x/fpm/php.ini
vim /etc/php.ini
  1. 找到以下项目:
disable_functions =
  1. 将需禁用的函数添加进去,例如:
disable_functions = exec,passthru,shell_exec,system,proc_open,proc_get_status,popen,phpinfo,symlink,putenv,scandir,chgrp,chown,stream_socket_server,pfsockopen

⚠️ 注意:函数之间用 英文逗号 , 分隔,无空格。


三、推荐的禁用函数组合(通用生产环境)

适用于:网站服务器、PHP-FPM、LNMP/LAMP、Docker、Nginx 环境。

disable_functions = exec,passthru,shell_exec,system,proc_open,proc_get_status,popen,symlink,chgrp,chown,stream_socket_server,pfsockopen,putenv,ini_set,ini_restore,dl,phpinfo

四、禁用函数后常见问题提示

✔ WordPress、Laravel、ThinkPHP 等可能受影响

如你使用的插件/框架需要:

  • proc_open()(如 Composer)
  • popen()(如后台状态监控)
  • shell_exec()(某些备份插件)
  • phpinfo()(某些诊断工具)

可能需临时解除。

✔ Docker / Cron / Supervisor 管理下的 PHP 项目

如需执行系统命令(备份脚本等),也需开启部分函数。

✔ 生产环境禁用,但开发环境可保留

开发环境可不禁用,以免影响排错。


五、修改后重启 PHP 服务

根据环境不同:

Nginx + PHP-FPM

systemctl restart php-fpm

Apache

systemctl restart httpd

Debian / Ubuntu

systemctl restart php7.4-fpm
systemctl restart php8.1-fpm

六、总结

分类是否建议禁用
命令执行类强烈建议禁用
系统/文件属主类建议禁用
PHP 配置修改类可根据情况禁用
动态加载扩展类强烈建议禁用
系统信息类视情况禁用
Socket 类托管环境强烈禁用,自建环境按需

发布回复

请输入评论!
请输入你的名字