宝塔面板PHP禁用函数列表,安全加固推荐
PHP禁用函数是宝塔面板里成本最低、见效最快的一项安全加固手段。
它把 exec、system、eval 这类容易被木马利用的高危函数直接关掉,即使网站被上传了恶意脚本,攻击者能执行的系统命令也会被大幅限制。
本文面向零基础站长,讲清在宝塔面板中设置PHP禁用函数列表的完整步骤、推荐清单和验证方式。
先确认你的环境是否适合直接禁用
并不是所有网站都能照搬同一份禁用列表。
动手前先做一个判断:
- 如果网站是 WordPress、Typecho、ThinkPHP、Laravel 等主流程序,且没有使用需要执行系统命令的插件,可以按推荐列表禁用。
- 如果网站依赖 图片处理、PDF 生成、视频转码、定时备份脚本,部分函数被禁用后功能会报错。
- 如果服务器上多个站点共用一个PHP版本,禁用函数对该版本下所有站点同时生效,需要先确认没有其他程序依赖这些函数。
宝塔面板的禁用函数是写在PHP配置文件里的,修改后需要重载PHP才会生效。
建议在业务低峰期操作,并提前备份网站和数据库。
在宝塔面板里找到禁用函数设置入口
操作路径很固定,按下面顺序点即可:
- 登录宝塔面板,左侧菜单点击 软件商店。
- 在已安装列表中找到对应的PHP版本,例如
PHP-7.4、PHP-8.0。 - 点击该PHP版本右侧的 设置 按钮。
- 在弹出的配置窗口中切换到 禁用函数 标签页。
- 在输入框中按行或按逗号填写要禁用的函数名,保存后点击 重载配置。
如果你习惯命令行,也可以直接编辑配置文件。
以PHP 7.4为例,路径通常是:
/www/server/php/74/etc/php.ini
找到 disable_functions 这一行,把函数名用英文逗号连接:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source
保存后执行重载:
/etc/init.d/php-fpm-74 reload
面板操作和命令行改的是同一个配置,两种方式选一种即可,不要重复改造成冲突。
推荐的PHP禁用函数清单
下面这份列表适合大多数建站场景,按风险等级分组,你可以根据实际情况删减。
命令执行类,风险最高,建议必禁:
exec,system,shell_exec,passthru,proc_open,popen,pcntl_exec
代码执行与信息泄露类,建议禁用:
eval,assert,create_function,phpinfo,show_source,highlight_file,parse_ini_file
文件与权限相关,按需禁用:
chmod,chown,chgrp,file_put_contents,copy,rename,unlink
最后这一组要谨慎。
很多CMS在上传图片、更新缓存时会用到 copy、rename、unlink,全禁可能导致后台上传失败。
建议先禁前两组,观察一周没有异常再考虑第三组。
一个可直接使用的保守版本:
disable_functions = exec,system,shell_exec,passthru,proc_open,popen,pcntl_exec,eval,assert,create_function,phpinfo,show_source,highlight_file,parse_ini_file
保存后如何验证是否生效
改完配置不能只看面板显示,要用实际结果确认。
推荐两种验证方式:
方法一:用探针或临时PHP文件测试
在网站根目录新建 test.php,写入调用 phpinfo() 的代码,访问后如果页面提示函数被禁用,说明生效。
测试完立即删除该文件。
方法二:查看PHP错误日志
访问网站后台,如果某个功能报错,去宝塔面板 网站 - 对应站点 - 日志 或 PHP 错误日志里查找关键字,例如:
Warning: exec() has been disabled for security reasons
看到这类提示,说明函数确实被禁用了,同时也告诉你哪个程序在用这个函数。
常见报错与避坑说明
禁用函数后最常见的现象是网站某个功能白屏或报500错误。
处理思路是:
- 先看错误日志定位是哪个函数被禁,不要盲目把整份列表清空。
- 如果确认是业务必需函数,比如某插件需要
proc_open,就把这一个函数从列表里移除,而不是全部放开。 - 不要禁用
mail、curl_init、json_decode这类基础函数,它们和命令执行无关,禁了只会让网站功能异常。 - 修改
php.ini后如果面板显示已保存但没生效,检查是否点过重载,或重启一次PHP-FPM。 - 多版本PHP要分别设置,只改一个版本不会影响其他版本。
另外要清楚一点:禁用函数是纵深防御的一环,不能替代及时更新程序、设置强密码和限制目录权限。
它的作用是提高攻击门槛,不是让网站绝对安全。
写在最后
宝塔面板PHP禁用函数列表并不需要照搬网上的长清单,核心是把命令执行类函数关掉,再根据自己程序的实际依赖逐步收紧。
建议先按本文的保守版本配置,观察一段时间,确认无报错后再考虑增加文件操作类函数。
安全加固是一个持续调整的过程,遇到报错优先查日志、定位函数,再决定是否放行。