ColdFusion 跑在 IIS 上?先查有没有遗留 PHP,再安全卸掉

如果你在 Windows+IIS 上跑 ColdFusion 或 Lucee,却从没主动装过 PHP,仍有可能服务器上留着 phpMyAdmin 或全局 PHP 处理程序。独立站长 Gregory Alexander 在 2026 年 10 月 23 日的博文里,记录了自己被「整站 multipart 防护」误伤登录页之后,用几段 PowerShell 把遗留 PHP 找干净并移除的过程。下面按运维可读的顺序整理——只谈检查与卸载,不展开任何漏洞利用细节。

为什么 ColdFusion 站点会撞上 PHP 规则

2026 年 10 月 21 日前后,PHP 侧发布紧急补丁(文中点名的修复版本包括 8.5.12、8.4.27、8.3.36、8.2.35 等)。部分主机商用 IIS 全局 URL Rewrite 做临时缓解:按内容类型拦截 multipart/form-data。规则若作用在整台服务器所有站点、所有路径,ColdFusion 的登录、图片与文件上传同样会 403——即便站点一行 PHP 都没有。

作者把规则收窄到仅匹配 .php 地址后,CF 表单恢复。接着他发现多年前为管 MySQL 装的 phpMyAdmin 仍在站点目录里,登录页还对着公网。主机确认不再使用 PHP 后关掉全局规则;作者则把「还有没有 PHP」当成例行体检。

准备工作

  • Windows 服务器,管理员 PowerShell。

  • 知道站点物理路径(下文示例用 C:\inetpub\wwwroot,请换成你的站点根)。

  • 先确认业务确实不依赖任何 PHP 应用;若主机代装了面板自用 PHP,卸之前先问主机。

操作步骤

1、看 IIS 会不会把 .php 交给 PHP

Import-Module WebAdministration
Get-WebHandler -PSPath 'IIS:\Sites' | Where-Object { $_.path -like '*.php' } | Select-Object name, path, scriptProcessor
  • 做什么:列出路径模式含 *.php 的处理程序。

  • 为什么:没有 handler,IIS 就不会跑 PHP;有输出则记下 name 与 scriptProcessor,后面删除要用。

  • 怎么确认成功:无输出=当前继承配置下不跑 PHP;有类似 FastCGI *.php C:\php\php-cgi.exe 的行=仍挂着。

2、扫站点里有没有 .php 文件

大目录用 dir 比 Get-ChildItem -Recurse 更快:

cmd /c "dir C:\inetpub\wwwroot\*.php /s /b" 2>$null | Measure-Object | Select-Object Count

按文件夹汇总、以及按修改时间看最近变动:

cmd /c "dir C:\inetpub\wwwroot\*.php /s /b" 2>$null | ForEach-Object { Split-Path $_ -Parent } | Group-Object | Sort-Object Count -Descending | Select-Object -First 25 Count, Name | Format-Table -AutoSize

cmd /c "dir C:\inetpub\wwwroot\*.php /s /b" 2>$null | Get-Item | Sort-Object LastWriteTime -Descending | Select-Object -First 15 LastWriteTime, Length, FullName | Format-Table -AutoSize
  • 做什么:计数、定位目录、看最近改动的 PHP 文件。

  • 为什么:遗留 phpMyAdmin、面板残骸,或上传目录里异常脚本,都会以 .php 现身。

  • 怎么确认成功:Count 为 0;若非 0,应能指出具体文件夹。作者案例里曾扫到约 4500 个文件,集中在两处 phpMyAdmin。

若出现不认识、散落在上传/图片目录、或近期被改过的 PHP 文件,先当可疑入侵处理,再谈「清理遗留」。

3、看进程与安装目录(辅助)

Get-Process php* -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime
Test-Path C:\php

没有 php-cgi 进程只说明最近没人点 PHP 页;仍以第 1 步 handler 为准(IIS 按需拉起)。

4、从外网看常见入口是否还开着

把域名换成自己的,探测常见路径是否 200:

foreach ($path in "phpmyadmin/", "phpMyAdmin/", "pma/", "info.php") {
    $url = "https://www.example.com/$path"
    try { $r = Invoke-WebRequest $url -UseBasicParsing -TimeoutSec 15; "$($r.StatusCode) $url" }
    catch { "$($_.Exception.Response.StatusCode.value__) $url" }
}

公网还能打开的 phpMyAdmin 登录页,等于长期暴露数据库管理面。

5、确认无依赖后,按顺序卸干净

  1. 备份 IIS 配置(可一键还原):

& "$env:windir\System32\inetsrv\appcmd.exe" add backup "before-php-removal"
  1. 移走 phpMyAdmin 等 PHP 应用(先挪到私有目录,勿直接删;配置里可能有库密码)。文件占用时再短暂停 IIS:iisreset /stop → 移动 → iisreset /start。之后可用 HeidiSQL、MySQL Workbench 等桌面工具经 RDP 管库。

  2. 在服务器级请求筛选里禁止 .php 扩展(任何站点访问 .php 都会在进 handler 前被拒):

Add-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/security/requestFiltering/fileExtensions' -Name '.' -Value @{ fileExtension = '.php'; allowed = 'false' }
  1. 删 handler 与 FastCGI 项(名称与路径用第 1 步记下的值替换):

Remove-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/handlers' -Name '.' -AtElement @{ name = 'FastCGI' }
Remove-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/fastCgi' -Name '.' -AtElement @{ fullPath = 'C:\php\php-cgi.exe' }

再跑一遍第 1 步,应无输出。

  1. 最后才卸载 PHP:控制面板卸安装包,或把 C:\php 先改名为 C:\php-removed 观察数周。主机代装的先征得同意。

若必须保留主机的缓解规则,把它的匹配从「所有 URL」改成只匹配 .php(规则名按实际修改),避免再误伤 CF 表单。改完用 Select-String 核对 applicationHost.config,并告知主机以免他们的巡检脚本静默写回旧规则。

注意事项

  • 全局规则伤及所有站点;突然 403 时读完整 IIS 错误页,往往能看到规则名。

  • 改错 web.config(站点级)可能看起来「没生效」——以 IIS 实际读取的 applicationHost.config 为准。

  • ColdFusion Trusted Cache 可能让你手动替换的 .cfm 仍跑旧编译结果;诊断时可换新文件名绕过。

  • 卸 PHP 不能代替「仍在用 PHP 时的升级」:若业务还跑 PHP,应按官方渠道升到已修复版本,并遵循厂商临时缓解建议。PHP 8.1 及更早已离开项目更新轨道。

Linux+Apache/Lucee 可用 php -v、apachectl -M | grep -i php、find 扫 .php;Debian/Ubuntu 上 a2dismod 后重启 Apache,再确认面板是否自用 PHP。

以下步骤基于 Gregory Alexander 2026年10月23日公开博文,于 2026年10月27日整理;菜单与模块名随 Windows/IIS 版本可能略有差异。

来源

[1] Is PHP Quietly Running on Your ColdFusion Server? How to Check, and Remove It,Gregory Alexander,2026年10月23日。

#ColdFusion #IIS #PHP #运维 #安全加固

排序方式 :

成为第一条评论!

Nobody's responded to this post yet. Add your thoughts and get the conversation going.