網頁功能集體「罷工」?兇手可能不是程式碼,而是隱形的 CSP 門神

快速導覽

【前言】

網站功能區塊空白、第三方工具載入失敗?多數情況下,元兇是「內容安全政策 (CSP)」
   當網站改版上線,或新嵌入如評論套件、社交媒體牆等第三方工具後,若預期區塊一片空白、功能動彈不得,即使程式碼與 GTM 皆未調整,也請別急著歸咎於程式錯誤或廠商。請優先檢查這道資安門神:CSP(Content Security Policy)。

🔍 情境:消失的功能區塊與「互推」循環

當新的第三方工具嵌入後,預期中的精美區塊變成了一個空的白盒。這時,溝通往往會陷入以下這個耗費大量時間與資源、令人絕望的「互推」循環:

  1. 行銷端: 「GTM 沒動,為什麼這個工具出不來?追蹤數據也全斷了?」
  2. 工具廠商: 「我們的代碼在其他網站都正常,一定是你們網站把我們擋掉了。」
  3. 客戶 IT 端: 「我們查過了,伺服器設定裡完全沒有開啟 CSP,這絕對不是我們擋的。」

各方都聲稱「沒動設定」。然而,此類問題的根源,通常就藏在那些被忽視的「預設安全政策」或「頁面層級的隱形標籤」之中。

💡 第二幕:到底什麼是 CSP?

CSP(Content Security Policy,內容安全政策) 簡單來說,就是一份給瀏覽器的「網頁資源白名單」。

是一份明確指示瀏覽器的「網頁資源白名單」。

CSP 告知瀏覽器:只允許載入網頁中指定網域的資源(例如腳本、圖片、字型等)。任何未經此政策許可的外部資源,都將被瀏覽器阻擋,以此強化網站的安全性

  • 如果 CSP 設為 'self': 代表只准載入自己網站的東西。
  • 如果廠商的腳本不在白名單內: 瀏覽器為了保護使用者,會直接「拒絕執行」該腳本。

這就是為什麼 IT 可能覺得沒開(因為沒動伺服器大門),但瀏覽器卻因為某個角落的小規則而把門關上了。

🛠 第三幕:怎麼從 F12 查到是不是 CSP 在搞鬼?

要終結互推,最快的方式就是拿出「證據」。請打開瀏覽器(如 Chrome),按下 F12(或右鍵點擊「檢查」):

  1. 按下 F12(或右鍵點擊「檢查」)開啟開發者工具。
  2. 切換到 「Network(網路)」 頁籤。
  3. 重新整理網頁(F5),在清單中找到類型(Type)為 「Doc(文件)」 的該網頁請求並點擊它。
  4. 在右側出現的面板中,選擇 「Headers(標頭)」 標籤。
  5. 「Response Headers(回應標頭)」 區塊中,尋找是否出現了 content-security-policy 這個項目。
  • 檢查關鍵: 如果看到 content-security-policy 的數值中出現了 'self',就代表該頁面被設定為「只允許載入自家網域的資源」。這正是導致第三方工具(外部來源)被阻擋、功能無法顯示的罪魁禍首。

🚀 第四幕:找到問題後,請工程師確認「這兩個位置」

一旦確認是 CSP 擋掉了工具,請工程師檢查以下兩個地方,通常答案就在其中之一:

1. HTTP Response Header(伺服器層級)

這是最常見的位置。請工程師檢查網頁伺服器(如 Nginx, Apache)或後端應用程式(Node.js, PHP)在回傳頁面時,標頭是否帶有 Content-Security-Policy。

  • 檢查方法: 在 F12 的「Network」分頁點擊頁面 URL,查看「Response Headers」。

2. HTML Meta Tag(頁面層級)

如果 IT 堅持伺服器沒設定,那很可能是寫在 HTML 程式碼裡。有些 CMS 系統或前端框架會自動加入:

  • 位置: <head> 區塊內的 <meta http-equiv="Content-Security-Policy" content="...">。
  • 特點: 這種設定不需要動到伺服器設定,只要改 HTML 就會生效,因此 IT 檢查伺服器 Config 時常會漏掉。

📢 總結

當網站部分區塊無故消失,請記住「先看 Console,再找 CSP」。只要定位出這條規則是寫在 「伺服器 Header」 還是 「HTML Meta Tag」,就能立刻結束互推循環,讓網頁功能恢復運作!


Tags