WordPress 上傳 SVG 被拒絕?用 Safe SVG 安全開放

設計稿交付 SVG,工程師上傳到 WordPress 卻看到「抱歉,基於安全理由不允許這種檔案類型」,或檔案雖然存在,媒體庫卻沒有預覽,這通常不是檔名問題,而是 WordPress 預設不開放 SVG 上傳。SVG 不是單純的點陣圖片格式,而是可包含 XML、樣式、連結與腳本的標記檔案,必須先考慮清理與權限。

本文使用 Safe SVG,在保留向量圖縮放優勢的前提下,讓指定使用者能上傳並由外掛清理 SVG。實際操作前,請先在測試站或可還原的環境建立備份;不要直接把不明來源的 SVG 放進正式站,也不要用程式碼在全站放寬 MIME 權限。

先確認症狀與風險

  • 媒體庫上傳 SVG 時顯示檔案類型不被允許。
  • 設計工具匯出的 SVG 無法加入文章、頁面或區塊。
  • 檔案已上傳但媒體庫縮圖空白,或前台顯示下載連結而不是圖像。
  • 直接修改 upload_mimes 或 functions.php 後,所有具備上傳權限的帳號都能提交 SVG。

SVG 可能包含內嵌腳本、事件屬性、外部資源或惡意標記。即使瀏覽器通常把它當圖像處理,管理後台、媒體預覽與前台嵌入方式仍可能造成風險。因此,重點不是只加入 image/svg+xml MIME Type,而是讓檔案經過清理,並限制誰能上傳。

安裝與啟用 Safe SVG

  1. 先確認目前 WordPress、PHP、佈景主題與外掛都有可用備份,並在測試站進行變更。
  2. 到「外掛」>「安裝外掛」,搜尋 Safe SVG,核對作者、版本與官方頁面後安裝。
  3. 啟用外掛,閱讀目前版本提供的設定與權限選項。不同版本的畫面可能不同,不要只依照舊截圖操作。
  4. 若外掛提供可上傳角色或能力設定,先只開放給必要的維護角色,不要直接讓所有註冊使用者使用。
  5. 可參考 Safe SVG 官方外掛頁面,確認支援狀態、功能與安全說明。

安裝前後也應把變更記錄下來,包括外掛版本、設定值、測試帳號與測試檔案。若團隊有變更管理流程,這筆紀錄可協助日後追查誰改了權限或哪次更新造成行為改變。

用低權限測試帳號驗證

不要直接用網站管理員測試,因為管理員可能繞過部分能力限制,結果不能代表一般維護流程。建立一個僅具必要媒體上傳能力的測試帳號,或使用既有的編輯者角色;測試完成後立即停用或刪除帳號。

  1. 以測試帳號登入後台,在「媒體」>「新增檔案」上傳一個由設計團隊提供、來源明確的簡單 SVG。
  2. 確認上傳不再被拒絕,媒體庫有縮圖或預覽,且編輯器能選取該檔案。
  3. 登出後改用不應具備上傳權限的低權限帳號,確認它不能上傳或管理不該接觸的媒體。
  4. 到前台檢查使用 SVG 的文章、頁面與快取後結果;必要時清除快取再測試。

若角色權限本身就不清楚,可延伸閱讀「新增使用者看不到後台?用 User Role Editor 修正角色權限」,但不要為了讓上傳成功而給測試帳號管理員權限。

如何確認 SVG 已被清理

「上傳成功」不代表檔案已安全。請從媒體庫開啟附件頁面,下載或以 SFTP 取得實際儲存檔案,再用文字編輯器檢查清理後的內容。不要只檢查本機原始檔,因為你要驗證的是 WordPress 實際保存與提供的版本。

  • 確認危險的 <script>、事件屬性,例如 onload、onclick,以及可疑的外部資源引用已移除或被安全處理。
  • 確認檔案仍保留必要的圖形元素、尺寸與樣式,前台顯示不應出現破圖。
  • 檢查附件網址的回應標頭與實際內容,避免伺服器把任意上傳內容當成可執行程式。
  • 用瀏覽器無痕視窗與未登入狀態測試,確認媒體網址的存取行為符合網站需求。

媒體庫的操作位置與附件資訊可對照 WordPress 媒體庫官方說明;若要確認新增檔案流程,請參考 新增媒體官方說明。若清理結果不符合預期,先停止在正式站使用該 SVG,不要自行加上更多放寬規則。

哪些情況仍可能被拒絕

  • 檔案不是有效 SVG,內容格式錯誤、編碼不正確,或副檔名只是改名而非真正的 SVG。
  • 使用者沒有必要的媒體上傳能力,或 Safe SVG 的角色限制沒有開放給該角色。
  • 主機、網路防火牆、WAF、主機商安全規則或其他安全外掛阻擋了 SVG。
  • SVG 內含外掛清理器拒絕的腳本、外部引用、特殊 XML 結構或不支援的屬性。
  • 多站網路、反向代理或媒體儲存服務有自己的允許格式清單。
  • WordPress、Safe SVG、PHP 或其他外掛版本不相容,導致上傳流程或媒體預覽異常。

遇到拒絕時,先記錄完整錯誤訊息,再以最小範例 SVG 測試,逐一排除檔案內容、帳號權限與主機規則。若近期剛更新外掛,也可參考「WordPress 外掛更新實務:從檢查、測試到異常回復」,不要一次停用所有安全控制。

何時停用 Safe SVG 或改用 PNG

若網站不再需要向量圖、供應商無法說明檔案來源、清理後圖形會失真,或安全掃描與主機政策不允許 SVG,就應停用 Safe SVG 並改用 PNG、WebP 等點陣格式。需要透明背景時,PNG 通常是較保守的替代方案;若圖示數量很多,也可由前端建置流程產生受控的 SVG 精靈,而不是開放後台任意上傳。

停用前先確認現有文章是否引用 SVG,並準備替代檔案。停用後測試前台頁面、編輯器與媒體庫,不要直接刪除既有附件;必要時使用備份或替換媒體流程逐一處理。

驗證與回復

完成設定後,依序驗證:低權限帳號只能執行允許的上傳操作;合法 SVG 可在媒體庫預覽並於前台顯示;清理後檔案不含腳本與可疑事件屬性;未授權的檔案類型仍會被拒絕;未登入訪客看不到不該公開的媒體。最後記錄 Safe SVG 版本、權限設定、測試結果與備份位置。

若發生破圖、上傳流程異常或安全掃描警示,先停止新增 SVG,將設定回復到變更前的狀態,必要時停用 Safe SVG 並改用 PNG。若網站出現可疑檔案或登入活動,可再依「WordPress 網站出現可疑登入或檔案?用 Wordfence 做一次基本檢查」進行檢查,並保留錯誤訊息、檔案雜湊與變更紀錄供後續追查。

相連文章

臉書留言

一般留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *