应禁用exec等高危函数并配置open_basedir等安全策略:一、通过php --ini定位php.ini路径并编辑;二、在disable_functions中填入指定函数列表;三、设置open_basedir限制文件操作范围;四、关闭display_errors并启用error_log;五、创建test.php验证禁用效果。

如果您正在为Web服务器配置PHP环境,但尚未对危险函数进行限制,则可能存在远程命令执行、文件遍历或信息泄露等高风险隐患。以下是配置php.ini禁用函数的正确操作步骤:
一、定位并编辑php.ini主配置文件
该步骤确保您修改的是实际生效的PHP主配置文件,避免因路径错误导致配置无效。不同安装方式对应的php.ini位置存在差异,需准确识别当前PHP运行所加载的配置文件路径。
1、在终端中执行命令 php --ini,查看“Loaded Configuration File”行显示的实际路径。
2、若输出为“none”,说明未加载php.ini,需检查PHP是否以模块方式运行,或确认是否存在独立的cli与web配置分离情况。
3、使用具备root权限的文本编辑器打开该文件,例如:sudo nano /etc/php/8.1/apache2/php.ini(路径依实际输出调整)。
二、配置disable_functions禁用高危函数
此操作通过PHP引擎层拦截函数调用,无需改动应用代码即可阻断常见攻击链路。禁用列表应覆盖命令执行、代码注入、文件系统操作及敏感信息输出类函数。
1、在php.ini中搜索 disable_functions,若该行被分号注释则删除开头的分号。
2、将以下函数完整填入该指令右侧,各函数间使用英文逗号分隔:exec,passthru,shell_exec,system,proc_open,popen,eval,assert,dl,show_source,parse_ini_file,curl_exec,curl_multi_exec,escapeshellcmd,escapeshellarg,symlink,link,chmod,chown,chgrp,ini_set,putenv。
3、确保整行无多余空格或中文逗号,格式示例:disable_functions = exec,passthru,shell_exec,system,proc_open,popen。
三、启用open_basedir限制脚本文件操作范围
即使危险函数已被禁用,仍可能通过include、file_get_contents等合法函数实现跨目录读取。open_basedir可强制限定PHP脚本仅能访问指定路径下的文件,有效防御路径遍历攻击。
1、在php.ini中查找 open_basedir 配置项,若不存在则新增一行。
2、设置其值为网站根目录与必要临时目录,例如:open_basedir = /var/www/html:/tmp:/var/www/upload。
3、多个目录间使用英文冒号分隔,Linux下注意末尾不加斜杠,Windows下使用分号分隔且路径含盘符。
四、关闭错误信息显示并启用错误日志记录
生产环境中向客户端暴露PHP错误信息可能导致数据库结构、文件路径、服务器版本等敏感数据泄露,必须禁止前端展示,同时保留后台日志用于排查问题。
1、将 display_errors 的值设为 Off。
2、将 log_errors 的值设为 On。
3、指定日志路径,例如:error_log = /var/log/php_errors.log,并确保该文件所在目录对www-data或nginx用户可写。
五、验证禁用函数是否生效
配置修改后必须通过实测确认目标函数已被拦截,防止因拼写错误、服务未重启或更高优先级配置覆盖导致策略失效。
1、创建测试文件 test.php,内容为:。
2、通过浏览器或curl访问该文件,若页面空白、返回500错误或提示"has been disabled for security reasons",则表示禁用成功。
3、执行命令 php -r "echo ini_get('disable_functions');",确认输出包含预期函数名且无语法错误。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











