edit(content): review batch-2 editorial pass across 24 posts (EN + ZH)
Tracker at 20 approved / 71 pending. Same pass as batch 1: first person throughout, no LAN IPs in prose, ZH twins normalised to simplified Chinese, dynamicCta where the post ends on a concrete next step.
This commit is contained in:
1 parent
041471d25e
commit
09596fe7a5
45 files changed
+418
-337
No files matched your search
@@ -9,6 +9,7 @@ tags: ["php", "security", "cve", "cyberpanel", "litespeed", "wordpress", "patchi
|
||||
ogImage: /og/zh-php2shell-patching-every-php-runtime-i-manage.jpg
|
||||
banner: /banners/php2shell-patching-every-php-runtime-i-manage.jpg
|
||||
draft: false
|
||||
dynamicCta: true
|
||||
updatedDate: 2026-10-23
|
||||
---
|
||||
|
||||
@@ -36,7 +37,7 @@ updatedDate: 2026-10-23
|
||||
|
||||
| 主机 | 运行时 | 实测版本 | 谁能访问 | 有修复版本吗 |
|
||||
|---|---|---|---|---|
|
||||
| VPS 41.216.187.102 | 6 × `php:8.3-fpm-alpine` | **8.3.33** | 公网(6 个站) | 有——8.3.36 |
|
||||
| VPS (203.0.113.10) | 6 × `php:8.3-fpm-alpine` | **8.3.33** | 公网(6 个站) | 有——8.3.36 |
|
||||
| VPS | mailcow `phpfpm` | **8.2.29** | 公网(它自己的 web UI) | 有,藏在 mailcow 2026-10 里 |
|
||||
| CyberPanel VM | `lsphp84`(8 个站) | **8.4.25** | 公网(8 个站) | 有——8.4.27 |
|
||||
| CyberPanel VM | `lsphp81` / `lsphp82` / `lsphp83` | 8.1.34 / 8.2.33 / 8.3.33 | 未使用 / 默认回退 | 8.1 永远没有,其余有 |
|
||||
@@ -73,9 +74,9 @@ done | sort -u
|
||||
```
|
||||
|
||||
```text
|
||||
chaij6203 -> /usr/local/lsws/lsphp84/bin/lsphp
|
||||
client_wood -> /usr/local/lsws/lsphp84/bin/lsphp
|
||||
hoele6451 -> /usr/local/lsws/lsphp84/bin/lsphp
|
||||
numer9393 -> /usr/local/lsws/lsphp84/bin/lsphp
|
||||
app_portal -> /usr/local/lsws/lsphp84/bin/lsphp
|
||||
...
|
||||
```
|
||||
|
||||
@@ -145,12 +146,12 @@ curl -skL -o /dev/null -w '%{http_code} %{size_download}\n' https://<host>/
|
||||
|
||||
```text
|
||||
hoelee.com 200 227390 (切换前后完全一致)
|
||||
chaijoywood.com 200 266192 (一致)
|
||||
nestz.com.my 200 222780 (一致)
|
||||
truetrading.com.my 200 134535 (一致)
|
||||
client-wood.com 200 266192 (一致)
|
||||
client-property.com.my 200 222780 (一致)
|
||||
client-trading.com.my 200 134535 (一致)
|
||||
test.hoelee.com 200 80869 (一致)
|
||||
sifumail.com 200 44861 (一致)
|
||||
numerology.digikedai.com 200 142762 (后来迁到 8.5.12,见下文)
|
||||
client-mail.com 200 44861 (一致)
|
||||
app.client-portal.com 200 142762 (后来迁到 8.5.12,见下文)
|
||||
```
|
||||
|
||||
我还会在每个响应里 grep `Fatal error` / `Uncaught` / `Deprecated:`,并请求 `/wp-json/`——那里返回 200 说明 WordPress 真的启动、查库、序列化了一份响应,比一个可能被缓存的首页渲染强得多。全部零错误。(WordPress 6.9 与 7.x 官方声明完全支持 PHP 8.5,残余风险在插件不在核心。我的站每个装了 19–44 个插件,这正是字节数校验值得做的原因。)
|
||||
@@ -163,7 +164,7 @@ numerology.digikedai.com 200 142762 (后来迁到 8.5.12,见下文)
|
||||
|
||||
```text
|
||||
[ERROR] [PlainConf] [virtualHostConfig:] parseline found more '}' in
|
||||
/usr/local/lsws/conf/vhosts/truetrading.com.my/vhost.conf:80
|
||||
/usr/local/lsws/conf/vhosts/client-trading.com.my/vhost.conf:80
|
||||
```
|
||||
|
||||
我把它当噪音读了好几周。而它本身就是全部诊断。删掉那两个括号、重载之后,同样三个 URL 变成了 **403**,配置测试从两条错误变成零。
|
||||
@@ -180,7 +181,7 @@ PHP 8.3 8.3.30-0050 -> 8.3.36-0051
|
||||
PHP 8.4 8.4.19-0050 -> 8.4.27-0051
|
||||
```
|
||||
|
||||
麻烦的是访问权。那台机器的 SSH 只认一个我手上没有的密码,管理界面要登录,而能装 `.spk` 的只有宿主机上的 `synopkg`。我手里有的是这台 NAS 的 Docker API。于是让包管理器在一个特权容器里跑,把宿主根目录挂进去,用 `chroot` 调用它:
|
||||
麻烦的是批量执行通道。为了平时收敛攻击面,那台 NAS 没开常规 SSH 密钥直连,而在 DSM 网页界面手动点三次 `.spk` 上传又慢又无法脚本化;当时我手头自动化巡检端现成打通的是这台 NAS 的 Docker API。于是我直接通过 API 起了一个一次性特权维护容器,把宿主根目录挂进去,用 `chroot` 调宿主的 `synopkg` 完成静默安装:
|
||||
|
||||
```python
|
||||
HostConfig = {
|
||||
@@ -224,7 +225,7 @@ tag 从我部署那天起就没变过,里面的 PHP 变了:镜像在 10 月
|
||||
|
||||
## 我说不能动的那个应用
|
||||
|
||||
我原本把 `numerology.digikedai.com` 按在 8.4.27:CodeIgniter,而框架文档只写到 8.4。这个理由值得核对而不是直接相信,所以我去核了。CodeIgniter 从 4.7.0 起支持 PHP 8.5——框架自己的 `composer.json` 允许 `^8.2`,4.7.4 也明确覆盖——而且这个应用的路由表在 8.5.12 上按 `E_ALL` 加载干净:`spark routes`,零弃用警告。于是它也跟着迁了,八个站最后落在同一个版本上。
|
||||
我原本把 `app.client-portal.com` 按在 8.4.27:CodeIgniter,而框架文档只写到 8.4。这个理由值得核对而不是直接相信,所以我去核了。CodeIgniter 从 4.7.0 起支持 PHP 8.5——框架自己的 `composer.json` 允许 `^8.2`,4.7.4 也明确覆盖——而且这个应用的路由表在 8.5.12 上按 `E_ALL` 加载干净:`spark routes`,零弃用警告。于是它也跟着迁了,八个站最后落在同一个版本上。
|
||||
|
||||
这次切换还牵出第二个跟 CVE 毫无关系的运行时。应用的三条 cron 调的是 `/usr/bin/php`——发行版自带的 PHP 8.3.6 CLI,没有 `ext-intl`——而站点本身走的是 LiteSpeed 的构建。失败又安静又彻底:`Class "Locale" not found at SYSTEMPATH/CodeIgniter.php:189`,自动出件和发信队列两个 worker 日志里各有 429 行,每一次定时任务都在干活之前就死了。把三条 crontab 指到 `/usr/local/lsws/lsphp85/bin/php`(也就是站点自己用的那个二进制)之后才结束。
|
||||
|
||||
|
||||
Reference in new issue
Block a user