禁用危险函数是提升php 8.0.30服务器安全的关键,需在php.ini中配置disable_functions = exec,system,shell_exec,passthru,proc_open,popen,eval,assert,call_user_func,call_user_func_array,create_function,pcntl_exec,dl,并重启iis、验证配置生效。

Windows 10 搭建 PHP 8.0.30 服务器时,关闭危险函数是提升 Web 安全的关键一步。PHP 默认启用的一些函数(如 exec、system、shell_exec、passthru、eval、assert、preg_replace(含 /e 修饰符)、create_function 等)在 Web 环境中极易被利用执行任意命令或代码注入,必须在 php.ini 中显式禁用。
修改 php.ini 禁用危险函数
危险函数不是靠删除扩展或改权限来限制的,而是通过 disable_functions 指令统一管控。该指令作用于所有 SAPI(包括 CLI 和 FastCGI),但需确保 IIS 实际加载的是你编辑的这份配置文件。
- 打开
C:\php\php.ini(或你实际解压路径下的 php.ini) - 搜索
disable_functions,找到该行(默认是注释状态或为空) - 取消注释,并填入常用高危函数,用英文逗号分隔,**不加空格**:
disable_functions = exec,system,shell_exec,passthru,proc_open,popen,eval,assert,call_user_func,call_user_func_array,create_function,pcntl_exec,dl - 注意:
preg_replace无法通过此方式禁用,但 PHP 7.3+ 已移除/e修饰符;eval和assert在 PHP 8.0+ 中仍可被滥用,务必保留禁用
确认禁用生效且无冲突
仅写入配置不等于生效——IIS 的 FastCGI 进程可能缓存旧配置,或加载了其他位置的 php.ini。
- 重启 IIS:以管理员身份运行命令提示符,执行
iisreset /restart - 新建一个
info.php放到网站根目录,内容为:<?php phpinfo(); ?>
浏览器访问,查找 disable_functions 行,确认值与你设置完全一致 - 同时检查 Loaded Configuration File 路径是否为你修改的
C:\php\php.ini,避免误改了开发版模板却加载了生产版 - 命令行验证(CLI 环境):
php -r "echo exec('whoami');"→ 应报错Warning: exec() has been disabled for security reasons
补充安全建议(非函数禁用但密切相关)
关函数只是基础,还需配合其他配置才能真正降低风险。
-
关闭显示错误:生产环境必须设为
display_errors = Off,防止泄露路径、函数名等敏感信息 -
限制脚本执行时间与内存:设置
max_execution_time = 30、memory_limit = 128M,防 DoS 类攻击 -
禁用远程文件包含:确保
allow_url_fopen = Off和allow_url_include = Off -
不依赖函数禁用来防 eval 类漏洞:框架或业务代码中应杜绝动态拼接并
eval用户输入,禁用只是兜底措施
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











