Start using WordPress in 2021

PHP 漏洞 php2shell 是什麼?為什麼一個請求就能讓網站被入侵?

PHP 漏洞 php2shell 說明
WordPress 教學、網頁資訊分享

2026 年 10 月 21 日,PHP 官方緊急發布安全更新,修補兩個合稱 php2shell 的嚴重 PHP 漏洞(CVE-2026-109618、CVE-2026-109619),風險評分 9.2 分(滿分 10 分)。

如果你的網站是 WordPress、WooCommerce,或其他用 PHP 寫的網站,這件事跟你有關。

這篇文章會用白話說明:

  • php2shell 漏洞是什麼
  • 為什麼網站什麼都沒改,還是有風險
  • 怎麼確認你的網站已經修補好

php2shell 是什麼?

PHP 是一種網站程式語言,全世界大約七成以上的網站靠它運作,WordPress 也是用 PHP 寫的。

php2shell 是 PHP「引擎本身」的漏洞,不是某個外掛或佈景主題出問題。攻擊者不用登入,也不需要帳號密碼,只要對網站送出特製的請求,就有機會在主機上執行自己的程式。資安術語叫「遠端程式碼執行」(RCE)。

項目 內容
漏洞名稱 php2shell(CVE-2026-109618、CVE-2026-109619)
公布日期 2026 年 10 月 21 日
嚴重程度 CVSS 9.2,嚴重
需要登入嗎 不需要
受影響範圍 PHP 5.4 以後的版本,預設設定就有這個漏洞
已修補版本 8.2.35、8.3.36、8.4.27、8.5.12

注意

官方還沒公布,攻擊就已經開始了。

資安公司發現,修補釋出前幾小時、甚至前幾天就有人在攻擊。美國資安署(CISA)也在 10 月 26 日,把它列進「已知遭利用的漏洞」清單。

為什麼它會壞掉?用白話說明

可以把 PHP 想像成一間餐廳的廚房。

步驟一 每位訪客進來,PHP 都會先「整理點單」

訪客送出表單或上傳檔案時,PHP 會先把收到的資料整理好,整理完才交給 WordPress 處理。

這個步驟發生在你的網站程式碼執行之前。

步驟二 攻擊者故意送一張「超大點單」

每個 PHP 請求能用的記憶體有上限。攻擊者故意送出一份特別大、特別複雜的表單資料,讓 PHP 整理到一半就把記憶體用完,程式只好中斷。

步驟三 中斷時,留下整理到一半的半成品

問題就出在這裡。PHP 在中斷前,已經先在帳本上記了「這裡有一筆資料」,可是那筆資料其實還沒放好。

就像點單本上已經寫了「第 5 道菜」,菜還沒做,廚師就被叫走了。

步驟四 收拾的時候,把半成品當成真的

請求結束時,PHP 會照著帳本收拾所有資料。它看到「第 5 道菜」就照常處理,結果拿到的是一塊沒整理過的記憶體,裡面可能是攻擊者事先塞進去的內容。

另一個漏洞的情況也類似。同一個 PHP 程序接著會服務下一位訪客,上一位留下的殘渣如果沒清乾淨,下一個請求就會讀到「已經丟掉的舊資料」(術語叫 use-after-free)。

步驟五 攻擊者趁這個空隙執行自己的程式

這些被當成真資料的殘渣是攻擊者控制的,所以他們有機會讓 PHP 執行他們指定的指令,最後拿到主機的執行權限。

PHP 漏洞 php2shell 流程圖:送出特製表單、PHP 整理資料、記憶體用完被中斷、留下半成品殘渣、把殘渣當成真的、攻擊者的指令被執行
php2shell 從送出表單到網站被入侵的流程

流程整理

  1. 訪客送出特製表單
  2. PHP 整理資料(WordPress 還沒開始跑)
  3. 記憶體用完,整理到一半被中斷
  4. 帳本記了資料,實際內容卻是殘渣
  5. 收拾時或下一個請求把殘渣當真
  6. 攻擊者控制的內容被執行,網站被入侵

為什麼外掛、防火牆擋不住?

因為整個過程發生在 WordPress 啟動之前。

WordPress 的資安外掛、登入限制、驗證碼,都要等 WordPress 跑起來才開始工作。這次的問題出在更前面的「PHP 整理資料」階段,網站本身寫得再乾淨也沒用。

研究人員還發現,這個漏洞可能透過 Cookie,把伺服器記憶體裡的其他資料洩漏出去,例如別人的登入資訊或金鑰。

哪些網站會受影響?

只要網站用 PHP 運作,而且還沒更新到修補版本,都在影響範圍內:

  • WordPress、WooCommerce 網站
  • Magento、Drupal、Joomla 等系統
  • 自己用 PHP 開發的網站

不管主機用 Apache、Nginx 搭配 PHP-FPM,還是 LiteSpeed,都包含在內。

舊版 PHP 要特別注意

PHP 7.3 以前的版本官方已經不再維護,不會有官方修補。如果你的網站還在用很舊的 PHP,請盡快找主機商或工程師處理。

怎麼確認我的網站已經修補?

步驟一 先看主機商的公告

大部分網站放在主機商那裡,PHP 由主機商管理。這次很多主機商都主動處理了。例如 Cloudways 在 10 月 21 日先部署臨時防護,隔天就完成全平台修補。

先到主機商的狀態頁或客服信件,確認他們有沒有處理。

步驟二 檢查 PHP 版本

在 WordPress 後台依序點「工具」→「網站健康狀態」→「資訊」→「伺服器」,就能看到 PHP 版本。

修補版本如下:

你用的版本系列 修補後版本
PHP 8.2 8.2.35 以上
PHP 8.3 8.3.36 以上
PHP 8.4 8.4.27 以上
PHP 8.5 8.5.12 以上

步驟三 版本號沒變,不一定代表沒修補

有些主機用「回補」的方式修補,修補完版本號還是舊的。

這種情況光看版本號判斷不了。可以直接問主機商客服,或請工程師看 PHP 的編譯日期(Build Date)是不是在 10 月 21 日之後。

步驟四 不放心的話,查一下網站紀錄

如果網站在修補前已經暴露了一段時間,建議請工程師看一下伺服器紀錄(log),確認有沒有可疑跡象,例如:

  • 大量「記憶體用完」的錯誤訊息
  • 特別大的表單或上傳請求
  • 不認識的管理員帳號、陌生的檔案

順便做好這幾件事,網站更安全

這次的漏洞跟登入無關。不過我幫客戶檢查網站紀錄時,常常順便看到大量機器人在暴力破解後台登入。建議一起把基本防護做好:

  • 限制登入嘗試次數:WordPress 本身沒有次數限制,可以裝 Limit Login Attempts Reloaded 這類外掛
  • 開啟兩步驟驗證:管理員帳號加上手機 App 驗證碼
  • 定期更新:WordPress、外掛、佈景主題、PHP 版本都要更新
  • 固定備份:出事的時候才有辦法還原

常見問題

我的網站沒有上傳功能,也會受影響嗎?

會。攻擊發生在 PHP 整理資料的階段,跟網站有沒有做上傳功能無關。

裝了資安外掛就安全了嗎?

不夠。這次的問題發生在 WordPress 啟動之前,外掛來不及攔截。根本的解法是更新 PHP。

我自己不會看這些設定,怎麼辦?

可以直接把這篇文章傳給主機商或網站工程師,請他們確認 PHP 已經更新到修補版本。

結語

php2shell 提醒我們:網站安全不只是 WordPress 和外掛的事,底下跑的 PHP 和主機環境也一樣重要。

這次我管理的客戶網站,我都逐一追蹤了主機商的修補進度,也檢查了伺服器紀錄,確認有沒有入侵跡象。如果你不確定自己網站的狀況,或需要協助檢查,歡迎跟我聯絡。

參考資料

關於作者

Popcorn

專職網頁設計師|擁有 15 年以上設計與網站製作經驗
累積超過 50 個 WordPress 架站實務。曾歷經印刷、電商與前端開發等產業,熟悉從品牌呈現、網站規劃、UI/UX 設計到前端開發的完整流程。

相關文章