必须禁用 allow_url_include 防止远程代码执行,需确认 CLI 和 Web 环境配置、修改正确 php.ini 文件、设为 Off(非小写或 false)、重启对应服务并验证生效。

PHP 安装后必须禁用 allow_url_include,否则远程代码执行风险极高——它允许通过 include()、require() 直接加载 HTTP/FTP 等外部 URL,攻击者可轻易植入恶意脚本。
确认当前 allow_url_include 是否已启用
运行以下命令快速检查:
php -i | grep allow_url_include
若输出为 allow_url_include => On 或值为空(默认 On),说明未加固。注意:CLI 和 Web SAPI(如 Apache/FPM)可能使用不同 php.ini,需分别验证:
- Web 环境:新建
info.php,内容为,浏览器访问后搜索allow_url_include - CLI 环境:用
php --ini查看加载的配置路径,再 grep
在正确 php.ini 中禁用该指令
找到正在生效的 php.ini(不是 php.ini-development 或 php.ini-production 模板),编辑并确保存在以下行:
立即学习“PHP免费学习笔记(深入)”;
allow_url_include = Off
常见误区:
十天学会易语言图解教程用图解的方式对易语言的使用方法和操作技巧作了生动、系统的讲解。需要的朋友们可以下载看看吧!全书分十章,分十天讲完。 第一章是介绍易语言的安装,以及运行后的界面。同时介绍一个非常简单的小程序,以帮助用户入门学习。最后介绍编程的输入方法,以及一些初学者会遇到的常见问题。第二章将接触一些具体的问题,如怎样编写一个1+2等于几的程序,并了解变量的概念,变量的有效范围,数据类型等知识。其后,您将跟着本书,编写一个自己的MP3播放器,认识窗口、按钮、编辑框三个常用组件。以认识命令及事件子程序。第
- 改错文件:Nginx + PHP-FPM 时,常误改 CLI 的
php.ini,实际应改 FPM 的配置(如/etc/php/8.2/fpm/php.ini) - 被覆盖:某些发行版(如 Ubuntu)会把扩展配置单独放在
conf.d/目录下,检查是否有其他 .ini 文件重设了该值 - 语法错误:写成
allow_url_include = off(小写)或allow_url_include = false—— PHP 只认Off或On(首字母大写)
重启服务并验证是否生效
修改后必须重启对应服务,否则配置不加载:
- Apache:执行
sudo systemctl restart apache2 - PHP-FPM:执行
sudo systemctl restart php8.2-fpm(版本号按实际调整) - Nginx + FPM 组合:只需重启
php-fpm,Nginx 不需要重启
再次运行 php -i | grep allow_url_include,确认输出为 allow_url_include => Off。还可写个测试脚本验证运行时行为:
额外加固建议(避免绕过)
仅关 allow_url_include 不够,还需同步处理依赖项:
-
allow_url_fopen应设为Off:虽然不影响include,但它是file_get_contents()、fopen("http://...")的开关,常被攻击链利用 - 检查自定义函数:某些老旧框架或 CMS(如早期 WordPress 插件)会手动拼接 URL 后传给
include,即使allow_url_include=Off,若代码本身有漏洞仍可能触发 SSRF 或本地文件包含 - 禁用危险函数(可选):在
disable_functions中加入include, require, include_once, require_once—— 但需谨慎,可能破坏正常逻辑
真正起作用的是配置+重启+验证三步闭环,漏掉任意一环都等于没做。很多线上系统看似改了 php.ini,却因没重启 FPM 或查错了配置路径,导致防护形同虚设。










