PHP2Shell 指的是什麼
這是 2026 年 10 月公開的兩項 PHP 核心缺陷(CVE-2026-109618、CVE-2026-109619),嚴重程度均為 CVSS 9.2(滿分 10)。攻擊方不必持有帳號,只要送出特製請求,就可能在網站主機上執行自備程式。官方修補版已於 2026 年 10 月 21 日釋出。
常有人覺得自家站點規模小,不會被選為目標。這波行動幾乎全靠自動化掃描,範圍是整個網路,只依 PHP 版本篩選,與公司大小無關。
登入驗證與防火牆為何擋不住
不妨把網站想成一棟大樓,登入驗證像各樓的門禁。問題出在一樓收發櫃台:包裹剛進門、還沒上到任何樓層,櫃台就已經出狀況。
因此這次缺陷有兩個重點:
怎樣判斷網站是否受影響
唯一關鍵是:主機實際正在執行的 PHP 版本。對照下表即可決定是否要處理:
| 目前的 PHP 分支 | 含修正的版本 | 官方正式修正 | 建議動作 |
|---|---|---|---|
| 8.5 | 8.5.12 或更新 | 已提供 | 核對是否已升至 8.5.12 |
| 8.4 | 8.4.27 或更新 | 已提供 | 核對是否已升至 8.4.27 |
| 8.3 | 8.3.36 或更新 | 已提供 | 先確認已更新,並規劃明年升至 8.4 |
| 8.2 | 8.2.35 或更新 | 有修正,但支援將於 2026-12-31 結束 | 先更新,並在年底前升至 8.4 以上 |
| 8.1、8.0、7.4 | 沒有正式發行版 | 僅有原始碼層級修補 | 先做臨時防護,並儘快升級 |
實務上最容易搞錯的是相信「主機商說 PHP 已經很新」。同一台機器常同時安裝多個版本,控制台顯示的未必是網站真正在用的那個,請對方確認的是網站正在執行的版本。版本停止維護後該如何處理,可另查相關說明。
現在就要做的三件事
1. 核對版號,能升級就升級
若低於上表的修補門檻,請主機商或維運廠商更新。8.2 以上多半只是小版號更新,風險較低;7.4 到 8.1 要跨大版本,程式、外掛與金流串接都可能要一併調整。較穩妥的做法是先在測試站升級並驗收,再放到正式環境。
2. 暫時不能升級時,先做防護
請主機商調整下列設定,改完必須重新啟動 PHP 才會生效:
- 關閉上傳進度(session.upload_progress):此功能預設開啟,就算網站沒用到也可能被利用。
- 限制單次請求大小:在主機前端擋下異常龐大的請求。
- 若網站使用 PHP 8.5,另外關閉致命錯誤追蹤資訊(fatal_error_backtraces)。
說得直接一點,這些只是先把收件窗口縮小,並沒有把缺陷補上,仍要排定升級時程。
3. 回查有沒有遭攻擊的跡象
海外雲端業者在公告前 4 天就已看到攻擊嘗試,因此 10 月 21 日之後才更新、或至今仍未更新的網站,都值得回頭查。請維運廠商檢查:
- 錯誤紀錄是否成批出現「記憶體不足」,而且發生在網站程式開始執行之前
- 網路請求裡是否有平時不會出現的上傳進度欄位
- 主機上是否有網站程式自己拉起的系統指令程序
只要有一項可疑,就依網站遭入侵的緊急應變流程處理,不要急著刪檔。
該問主機商或維運廠商的三個問題
| 要提出的問題 | 理想的回答 | 需要警惕的回答 |
|---|---|---|
| 網站真正運行的 PHP 完整版號是多少? | 能直接說出完整版號,例如 8.4.27 | 「應該已經是新版了」 |
| PHP2Shell 的修補是否已經完成? | 已升到修補版,或已啟用臨時防護並排定升級日期 | 「網站不大,不會被攻擊」 |
| 錯誤紀錄有沒有查過? | 能說明查了哪一段時間、有沒有異常 | 「沒出問題就不必看」 |
結語:缺陷還會再來,版本必須跟上
PHP2Shell 不會是最後一個嚴重缺陷。請記住以下三點:
- 先弄清網站用的是哪個 PHP 版本:不知道版號,就無法判斷下一次缺陷是否與自己有關。
- 臨時防護不是修復:可以爭取時間,但終點仍是修補版。
- 把 PHP 升級排進每年維護:在支援到期前就升級,不要每次都等漏洞公告才處理。
平時也可依資安檢查要點,自行複查網站防護是否到位。