Insights

上傳的檔案,會不會被當成程式執行?一次沒有人通報、我們自己找到的漏洞


很多網站都有上傳功能:會員上傳大頭照、後台上傳商品圖、申請表單附上 PDF。這些功能平常不太會有人注意,但如果處理不當,上傳的檔案可能會被伺服器當成程式執行。一旦發生,攻擊者等於可以在你的網站上做任何事。

以下是我們在處理 PHP2Shell 漏洞 的同一週,另外遇到的一件事。

一、沒有人通報,是我們自己發現的

這件事沒有任何主管機關或客戶通報。我們在修正某個網站的上傳功能時往下追,發現同一種上傳寫法,也出現在其他網站共用的後台程式裡。

既然是共用的寫法,問題就不會只在一個網站。所以我們沒有只修眼前這一站,而是把使用同一套後台程式的網站全部列出來,一起檢查、一起處理,總共 19 個網站。

二、為什麼上傳的檔案會變成程式?

網站伺服器會依照檔案的類型決定怎麼處理:圖片就直接傳給瀏覽器顯示,程式檔就執行它。

問題出在兩個地方同時發生的時候:

  1. 上傳時沒有限制檔案格式:攻擊者可以上傳一個程式檔,或把程式檔偽裝成 PDF、圖片。
  2. 上傳目錄允許執行程式:檔案存好之後,只要知道網址,就能讓伺服器執行它。

兩個條件只要擋住一個,攻擊就不會成功。我們的做法是兩層都擋。

上傳漏洞的兩層防線:沒有防護時,偽裝成 PDF 的程式檔會被存進可執行程式的上傳目錄並被執行;兩層都擋時,程式層只收白名單格式並檢查內容,伺服器層讓上傳目錄一律不執行程式

三、第一層:上傳目錄一律不執行程式

在伺服器設定上,讓上傳目錄裡的任何檔案都不會被當成程式執行。就算真的有程式檔被傳上來,它也只是一個普通檔案。

這一層不需要改網站程式,所以 19 個網站在發現問題的當天就全部完成。

四、第二層:只收白名單內的檔案,並檢查內容

伺服器那一層是保險,根本的修正還是要在程式裡做:

  • 只接受白名單內的檔案格式:不是「擋掉危險的格式」,而是「只放行需要的格式」。
  • 檢查檔案內容:只看副檔名不夠。內容是程式、副檔名卻改成 .pdf 或 .jpg 的檔案,一樣要擋下來。

白名單要放行哪些格式,我們不是憑感覺訂,而是統計正式環境實際上傳過哪些格式再決定。這樣才不會為了安全,反而擋掉使用者平常要傳的檔案。

五、怎麼確認真的擋得住

修好之後,我們不是只看設定檔,而是實際去打:

  • 伺服器層:每個網站都實際放一個測試用的程式檔到上傳目錄,確認它不會被執行。
  • 程式層:準備 19 種偽裝檔,對每一個上傳入口逐一上傳。該擋的都要被擋下,正常的檔案也要能照常上傳。兩套測試環境都全部通過。

驗證過程中還有一個小插曲:一開始的測試腳本,曾把「檔案根本沒有存進去」誤判成「被擋下了」。之後我們規定,一定要看到擋下的原因(錯誤訊息),才算通過。

六、有沒有被入侵過?

修好不代表之前沒事,所以我們也回頭檢查:

  • 上傳目錄裡的 5,000 多個檔案,沒有任何一個是程式碼。
  • 存取紀錄裡,確實有外部的掃描程式一直在找上傳目錄裡的程式檔(也就是在找有沒有人留下後門),但全部都找不到。

結論是沒有發現被入侵的跡象。

七、系統升級後,這道防線更重要

這次還有一個值得記下的觀察:舊版框架內建的檢查,會順帶擋掉某些偽裝檔;新版框架不會。

也就是說,系統升級到新版之後,原本「剛好被擋住」的東西可能就擋不住了。上傳的白名單和內容檢查,不能只靠框架,要自己做好。

如果你的網站有上傳功能,可以確認這幾件事

  • 網站上有哪些地方可以上傳檔案?(前台、後台、會員中心都算)
  • 上傳的檔案存在哪裡?那個位置能不能執行程式?
  • 上傳時是「只放行需要的格式」,還是「擋掉危險的格式」?
  • 只檢查副檔名,還是也檢查檔案內容?
  • 系統升級過框架版本嗎?升級後上傳的檢查有沒有重新測過?

這些問題,可以直接問負責維運的廠商。

想了解我們的系統開發與維運方式,可以參考 系統開發・平台建置 服務說明,或直接 與我們聯繫。

分享這篇

相關服務

系統開發・平台建置 為你的業務量身打造的系統平台。了解服務內容、合作流程與案例 →

相關案例

臺北表演藝術中心 — 場地與設備租用系統臺北表演藝術中心(TPAC) 威剛科技 招募求職系統威剛科技 ADATA 中華民國人壽保險商業同業公會壽險公會 LIA-ROC

延伸閱讀

公司的密碼庫有備份嗎?我們從「零備份」做到冷備援,主機突然離線那天真的派上用場2026-11-07 NAS 被暴力破解打到卡死:971 個來源 IP、每個只試 2.5 次,「按 IP 封鎖」一個都攔不到2026-11-07 我們回報「零損失」,結果多台虛擬機寫不進去:系統升級後,驗證要驗到會出事的那一層2026-11-07
與我們聊聊你的專案
回到頂部 作品集 服務項目 知識文章 產品服務 聯絡我們
Lab Space