Skip to content

PHP 重大漏洞修復 ​

2026-10-21,PHP 官方公布了兩個嚴重漏洞:不必登入、不需要任何帳號,就能在你的伺服器上執行任意程式碼。所有對外提供網頁服務的 PHP 都受影響,請儘快處理。

我受影響嗎 ​

只要店鋪跑在 PHP 上就會受影響,不論是 aaPanel(寶塔)、自己編譯安裝,還是 Docker。

已修復的版本是 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 或以上。8.1 及更舊的版本官方已停止維護,不會推出修復版,但下面的一鍵腳本一樣能修。

查看自己的版本:

bash
php -v

aaPanel 裝了多個 PHP 版本時,每個版本要分別查,例如 /www/server/php/82/bin/php -v。

依你的部署方式選擇 ​

部署方式怎麼修
aaPanel(寶塔)、自己編譯安裝的 PHP一鍵修復腳本
用系統套件安裝的 PHP(apt / yum)用系統的套件管理工具更新,各發行版都已推出修復
Docker一鍵升級容器
虛擬主機無法自行更換 PHP,請聯絡主機商儘快升級

一鍵修復 ​

用 root 在伺服器上執行:

bash
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
bash php-security-update.sh --check --harden

其他常用參數:

bash
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 ​

位於中國大陸的伺服器下載不了腳本時,改用這個網址:

bash
curl -fsSL https://cdn.jsdelivr.net/gh/lizhipay/php@main/php-security-update.sh -o php-security-update.sh && bash php-security-update.sh --harden

Docker 使用者 ​

官方映像已經是修復後的 PHP 8.2.35,而且預設已開啟 session 硬化,不需要自己做任何設定。

在伺服器上執行這一條命令,升級到最新映像:

bash
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:

bash
php -v

版本號是 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 或以上就修好了。舊版本(7.x、8.0、8.1)的版本號不會改變,以腳本最後顯示的結果為準。

再確認一下 session 硬化已經開啟,輸出 1 就對了:

bash
php -r 'echo ini_get("session.harden"), PHP_EOL;'

Docker:

bash
docker exec faka php -r 'echo PHP_VERSION, " ", ini_get("session.harden"), PHP_EOL;'

輸出 8.2.35 1 就對了。容器名稱不是 faka 的,換成你自己的。

基於 MIT 協議開源