PHP 重大漏洞修復
2026-10-21,PHP 官方公布了兩個嚴重漏洞:不必登入、不需要任何帳號,就能在你的伺服器上執行任意程式碼。所有對外提供網頁服務的 PHP 都受影響,請儘快處理。
- 官方公告:https://www.php.net/archive/2026.php#2026-10-21-5
- 漏洞編號:
CVE-2026-109618、CVE-2026-109619(CVSS 9.2) - 一鍵修復工具:https://github.com/lizhipay/php
我受影響嗎
只要店鋪跑在 PHP 上就會受影響,不論是 aaPanel(寶塔)、自己編譯安裝,還是 Docker。
已修復的版本是 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 或以上。8.1 及更舊的版本官方已停止維護,不會推出修復版,但下面的一鍵腳本一樣能修。
查看自己的版本:
php -vaaPanel 裝了多個 PHP 版本時,每個版本要分別查,例如 /www/server/php/82/bin/php -v。
依你的部署方式選擇
| 部署方式 | 怎麼修 |
|---|---|
| aaPanel(寶塔)、自己編譯安裝的 PHP | 一鍵修復腳本 |
| 用系統套件安裝的 PHP(apt / yum) | 用系統的套件管理工具更新,各發行版都已推出修復 |
| Docker | 一鍵升級容器 |
| 虛擬主機 | 無法自行更換 PHP,請聯絡主機商儘快升級 |
一鍵修復
用 root 在伺服器上執行:
curl -fsSL https://raw.githubusercontent.com/lizhipay/php/main/php-security-update.sh -o php-security-update.sh && bash php-security-update.sh --harden腳本會自動找出這臺伺服器上所有的 PHP,依來源和版本分別處理:
| 版本 | 怎麼處理 |
|---|---|
| 8.2 / 8.3 / 8.4 / 8.5 | 升級到同系列最新的修復版 |
| 7.4 / 8.0 / 8.1 | 套用 PHP 官方的修補程式後重新編譯 |
| 7.0 – 7.3、5.4 – 5.6 | 套用本專案移植的修補程式後重新編譯 |
| 5.3 及更舊 | 只能套用官方建議的緩解設定 |
用系統套件(apt / yum)安裝的 PHP,腳本不會更動,只會告訴你該執行哪條更新命令。
會不會讓店鋪掛掉?
- 每個版本都會先編譯好、檢查通過才替換,替換前會完整備份。
- 新版啟動失敗會自動還原成舊版。
- 店鋪只會在 PHP 重新啟動時中斷一兩秒。
- 下載的 PHP 原始碼全部會驗證 SHA256。
編譯所需的時間取決於伺服器規格,從幾分鐘到半小時不等,建議挑流量少的時段執行。
先看看會改什麼
不放心的話,可以先只檢查、不做任何更動:
bash php-security-update.sh --check --harden其他常用參數:
bash php-security-update.sh --harden --only 74,82 # 只處理指定版本
bash php-security-update.sh --harden -y # 跳過倒數計時,直接開始命令裡的 --harden 是什麼
--harden 會順便開啟 session 硬化,修掉另一個跟上面兩個漏洞無關的老問題:攻擊者可以利用 PHP 的 session 機制塞入惡意物件,一樣能執行程式碼。官方這次的修復並未處理它,所以本頁的命令都帶上了它。
開啟後,session 裡一律不允許出現物件。異次元店鋪系統只會在 session 裡存一般資料,完全不受影響。即使 PHP 已經是最新版,也會替它重新編譯一次,把這項修復編進去。
如果同一臺伺服器上還跑著其他 PHP 程式,而且它會把物件存進 session,開啟後那個程式可能會出問題。遇到這種情況,把命令裡的 --harden 拿掉再執行即可。
連不上 GitHub
位於中國大陸的伺服器下載不了腳本時,改用這個網址:
curl -fsSL https://cdn.jsdelivr.net/gh/lizhipay/php@main/php-security-update.sh -o php-security-update.sh && bash php-security-update.sh --hardenDocker 使用者
官方映像已經是修復後的 PHP 8.2.35,而且預設已開啟 session 硬化,不需要自己做任何設定。
在伺服器上執行這一條命令,升級到最新映像:
curl -fsSL https://raw.githubusercontent.com/lizhipay/acg-faka/main/docker/upgrade.sh | bash腳本會自動完成這些事:
- 找出本機的異次元店鋪系統容器,不論是用
docker run、aaPanel 還是 1Panel 建立的都可以; - 先確認
/data有掛載資料卷,沒有就停下來,不冒遺失資料的風險; - 拉取最新映像,沿用原本的連接埠、資料卷、環境變數、重啟策略重建容器,資料原封不動;
- 新容器起不來會自動換回舊容器,店鋪照常營運;
- 已經是最新版就什麼都不做。
用 docker compose 安裝的,腳本會自動更新原始碼並重新建置映像。這一步要編譯 PHP,需要幾分鐘到十幾分鐘。
看到這一行就代表升級成功了:
[acg-faka] 当前:PHP 8.2.35,session 硬化已开启後臺的「線上升級」修不了這個漏洞
線上升級只會更新網站程式。PHP 本身裝在映像裡,只能靠換新映像取得修復。
也不要在容器裡執行上面的一鍵修復腳本,Docker 使用者換映像就夠了。
幾種特殊情況:
- 提示沒有權限:在
bash前面加上sudo。 - 本機有多個異次元店鋪系統容器:在命令最後加上容器名稱,例如
... | bash -s -- faka。 - 連不上 GitHub:把腳本網址換成
https://cdn.jsdelivr.net/gh/lizhipay/acg-faka@main/docker/upgrade.sh。 - 拉取映像失敗:多半是伺服器連不上
ghcr.io。腳本會在更動容器之前停下,店鋪不受影響;替 Docker 設定好代理或映像加速後再執行一次。
修完怎麼確認
aaPanel / 自己安裝的 PHP:
php -v版本號是 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 或以上就修好了。舊版本(7.x、8.0、8.1)的版本號不會改變,以腳本最後顯示的結果為準。
再確認一下 session 硬化已經開啟,輸出 1 就對了:
php -r 'echo ini_get("session.harden"), PHP_EOL;'Docker:
docker exec faka php -r 'echo PHP_VERSION, " ", ini_get("session.harden"), PHP_EOL;'輸出 8.2.35 1 就對了。容器名稱不是 faka 的,換成你自己的。
