更新 HTTP 快取,藉此提升安全性和隱私防護

如果忘記或濫用 Cache-Control 標頭,可能會對網站的安全性和使用者隱私有負面影響。

Arthur Sonzogni
Arthur Sonzogni

根據預設,任何類型的快取都能快取資源。 如未使用或濫用 Cache-Control 標頭,可能會對網站和使用者隱私的安全性造成負面影響。

如果有想保留的個人化回覆,建議您採取以下任一做法:

  • 防止中繼端快取資源。設定 Cache-Control: private
  • 設定適當的次要快取金鑰。如果回應因 Cookie (Cookie 儲存憑證時可能發生) 而改變,請設定 Vary: Cookie

請繼續閱讀下文,瞭解重要性,並探索:

  1. 您可能不知道的安全性和隱私權問題
  2. 不同類型的 HTTP 快取類型和常見誤解
  3. 建議對高價值網站採取的行動

Spectre 安全漏洞出現漏洞資源

Spectre 漏洞可讓頁面讀取 OS 程序的記憶體。這意味著攻擊者可在未經授權的情況下,取得跨來源資料的存取權。因此,新世代網路瀏覽器將部分功能 (例如 SharedArrayBuffer高解析度計時器) 用於跨來源隔離的頁面會受到限制。

新式網路瀏覽器會強制執行跨來源嵌入程式政策 (COEP)。這可確保跨來源資源符合以下情況:

  • 不使用 Cookie 要求的公開資源
  • 已明確允許透過 CORS 或 CORP 標頭跨來源共用資源

COEP 設定無法防止攻擊者利用「Spectre」。不過,這可確保跨源資源對攻擊者不具價值 (當瀏覽器以公開資源載入時),或是允許與攻擊者分享 (與 CORP: cross-origin 共用時)。

HTTP 快取對 Spectre 有何影響?

如果未正確設定 Cache-Control 標頭,攻擊者可能會執行攻擊。例如:

  1. 系統會快取憑證的資源。
  2. 攻擊者載入跨來源隔離頁面。
  3. 攻擊者再次提出資源請求。
  4. COEP:credentialless 是由瀏覽器設定,因此在沒有 Cookie 的情況下擷取資源。不過,快取可能會改為傳回憑證化的回應。
  5. 然後,攻擊者就能透過 Spectre 攻擊讀取個人化資源。

雖然網路瀏覽器的 HTTP 快取不允許實際執行這類攻擊,但是額外的快取並不在瀏覽器的直接控管範圍內。這可能導致攻擊成功。

有關 HTTP 快取的常見誤解

1. 只有瀏覽器會快取資源

快取通常會有多層快取。有些快取則專供單一使用者使用,有些則提供給多位使用者。有些是由伺服器控制,有些由使用者控管,有些則由中介者控制。

  • 瀏覽器快取。這些快取由單一使用者所擁有,並專門用於網路瀏覽器中。避免多次擷取相同的回應,藉此提升效能。
  • 本機 Proxy。這個套件可能是由使用者安裝,但也可以由中介商管理,包括公司、其機構或網際網路供應商。本機 Proxy 通常會快取多位使用者的單一回應,進而構成「公開」快取。本機 Proxy 有多個角色。
  • 來源伺服器快取 / CDN。這是由伺服器控制。原始伺服器快取的目標是為多位使用者快取相同的回應,藉此降低原始伺服器的負載。CDN 的目標很類似,但會分散在全球各地,並指派給距離最近的使用者來縮短延遲時間。
瀏覽器和伺服器之間通常會有多層快取層。
瀏覽器和伺服器之間可能會有多個快取層。舉例來說,您可能會遇到伺服器快取,接著出現 CDN 和瀏覽器快取。此外,CDN 和瀏覽器快取之間也可能會設定本機 Proxy。

2. SSL 可防止中介商快取 HTTPS 資源

無論是基於存取目的 (例如分享計量付費連線、病毒檢查或資料遺失防護 (DLP)),許多使用者都會經常使用本機設定的 Proxy。中介快取正在執行 TLS 攔截

中介快取通常會安裝在公司的員工工作站上。網路瀏覽器已設為信任本機 Proxy 的憑證。

這些 HTTPS 資源最終可能會由本機 Proxy 快取。

HTTP 快取的運作方式

  • 根據預設,資源會隱含快取。
  • 主要快取金鑰包含網址和方法。(網址、方法)
  • 次要快取金鑰Vary 標頭中包含的標頭。Vary: Cookie 表示回應取決於 Cookie
  • Cache-Control 標頭可提供更精細的控制項。

高價值網站的開發人員 (包括高流量網站和與個人身分識別資訊互動的網站) 應立即採取行動,提升安全性。

資源的存取權會因 Cookie 而異。如果未採取預防行動,中介快取可能會傳回使用 Cookie 要求的回應,但該要求並未採取預防措施。

建議您採取下列其中一種做法:

  • 防止中繼端快取資源。設定 Cache-Control: private
  • 設定適當的次要快取金鑰。如果回應因 Cookie (Cookie 儲存憑證時可能發生) 而改變,請設定 Vary: Cookie

請特別變更預設行為:一律定義 Cache-ControlVary

其他注意事項

還有其他類似的攻擊類型使用 HTTP 快取,但這些攻擊使用的機制與跨來源隔離不同。例如,Jake Archibald 就說明瞭如何在 CORS 中獲勝的部分攻擊。

部分網路瀏覽器可因應這類攻擊,而分割 HTTP 快取,取決於是否有透過憑證要求資源回應。截至 2022 年,Firefox 會分割快取,但 Chrome 和 Safari 則不會。 Chrome 日後可能會分割快取。請注意,這些攻擊彼此不同,而且與根據頂層來源分割時可相輔相成。

即使網路瀏覽器可以解決這個問題,本機 Proxy 快取中仍會存在這個問題。因此,我們還是建議您遵循上述建議。


Ben PattinsonUnsplash 上提供的標題相片。