限制PHP需按运行形态分场景实施:命令行用AppLocker或软件限制策略拒绝php.exe路径;.php双击执行通过用户级黑名单禁用文件名;Web服务调用则需停用相关服务并封禁httpd.exe等宿主进程。

要限制 PHP 在 Windows 系统中运行,不能简单理解为“禁止一个叫 php.exe 的文件”,因为 PHP 有多种运行形态:命令行(php.exe)、Web 服务器模块(如 Apache 的 php_module 或 IIS 的 FastCGI)、脚本解释器(.php 文件被其他进程调用)等。组策略本身不识别语言或文件类型,只管控可执行文件、脚本行为和系统服务。因此,限制 PHP 需按实际使用场景分路径实施。
明确限制目标再选策略
先确认你要阻断的是哪类 PHP 运行方式:
- ✅ 用户双击 .php 文件或在 CMD/PowerShell 中手动运行
php.exe - ✅ 开发者本地启动 PHP 内置服务器(如
php -S localhost:8000) - ✅ Web 服务(如 IIS/Apache)加载 PHP 模块提供网页服务
- ❌ 纯 Web 请求(如浏览器访问
example.com/test.php)——这属于网络层或应用层控制,组策略不介入
一、阻止命令行与桌面直接执行 PHP(最常用)
适用于禁用开发测试、脚本滥用等场景,推荐用 AppLocker(企业版/专业版)或软件限制策略(全版本支持)。
-
AppLocker(首选,防绕过强)
路径:计算机配置 → 策略 → 应用程序控制策略 → AppLocker → 可执行规则- 新建“拒绝”规则,用户/组指定为
DOMAIN\Developers或DOMAIN\StandardUsers - 条件类型选“路径”,填入:
-
C:\php\php.exe(若为固定安装路径) -
C:\xampp\php\php.exe -
C:\Program Files\PHP\*\php.exe(通配符覆盖多版本)
-
- 启用前务必先设为“审核模式”,观察事件查看器(AppLocker → EXE and DLL 日志)是否误拦其他工具
- 新建“拒绝”规则,用户/组指定为
-
软件限制策略(兼容 Win10 家庭版)
路径:计算机配置 → Windows 设置 → 安全设置 → 软件限制策略 → 其他规则- 新建“路径规则”,输入
%SystemDrive%\php\php.exe,安全级别设为“不允许” - 若 PHP 位于多个位置,需为每个路径单独建规则;也可新建“哈希规则”锁定特定 php.exe 二进制(改名/复制均无效)
- 新建“路径规则”,输入
二、禁止 .php 文件被双击或默认打开
Windows 默认不执行 .php,但若用户设置了关联(如用 Notepad++ 或 php.exe 打开),可通过以下方式解除:
-
用户级黑名单(轻量,仅限文件名)
路径:用户配置 → 管理模板 → 系统 → “不要运行指定的Windows应用程序”- 启用后点击“显示”,添加:
php.exephp-cgi.exephp-win.exe - 注意:该策略不拦截
cmd /c php test.php,仅对资源管理器双击、开始菜单运行生效
- 启用后点击“显示”,添加:
-
解除文件关联(辅助手段)
组策略无法直接修改文件关联,但可配合注册表策略清空:
计算机配置 → 策略 → Windows 设置 → 注册表- 项:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.php - 值名称:
(默认),值数据留空(或设为txtfile) - 同步清理
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile下的 shell 命令
- 项:
三、阻断 Web 服务器调用 PHP(需配合服务管控)
如果目标是禁用本地开发环境(如 XAMPP/WAMP),关键不是封 php.exe,而是让 Web 服务无法加载它:
-
停用相关服务
路径:计算机配置 → 策略 → Windows 设置 → 安全设置 → 系统服务- 将
Apache2.4、wampapache64、Mysql80等服务设为“已禁用” - 注意:仅禁用服务不够,还需防止用户手动启动
- 将
-
封禁 Web 服务主程序
对httpd.exe(Apache)、nginx.exe、iisexpress.exe等同样用 AppLocker 或路径规则拒绝- 因为即使 php.exe 被拦,Web 服务仍可能通过其他方式(如 CGI、SCGI)间接触发
关闭端口监听(防火墙补充)
使用高级安全防火墙创建出站+入站规则,阻止php.exe绑定127.0.0.1:8000等常见开发端口(需明确指定路径,否则规则无效)
四、注意事项与验证要点
- PHP 脚本本身(.php 文件)不是可执行体,组策略不直接拦截它——必须管控其解释器(php.exe)或宿主进程(如 webserver.exe)
- 禁用
php.exe后,部分工具(如 Composer、Laravel Valet)可能失效,建议按用户组精细化部署,避免影响运维账号 - 家庭版 Windows 无 gpedit.msc,可用注册表替代:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun下新建字符串值,命名为1,数据为php.exe - 验证时务必用标准用户登录后测试:
- 运行
php -v(CMD) - 双击任意
.php文件 - 执行
start php -S localhost:8000(PowerShell) - 查看事件查看器中 AppLocker 或软件限制策略日志
- 运行
不复杂但容易忽略。



















