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

忘記或誤用 Cache-Control 標頭,可能會對網站安全和使用者隱私造成負面影響。

Arthur Sonzogni
Arthur Sonzogni

根據預設,系統一律允許任何類型的快取將資源快取。不使用或誤用 Cache-Control 標頭,可能會對網站安全性和使用者隱私權造成負面影響。

如要保密個人化回應,建議您採取下列做法:

  • 防止中介服務快取資源。設定 Cache-Control: private
  • 設定適當的次要快取鍵。如果 Cookie 儲存憑證時,回應會因 Cookie 而有所不同,請設定 Vary: Cookie

請繼續閱讀,瞭解這項功能的重要性,以及:

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

Spectre 安全漏洞導致的資源外洩

Spectre 安全漏洞可讓網頁讀取作業系統程序的記憶體。這表示攻擊者可以未經授權存取跨來源資料。因此,新式網路瀏覽器已將部分功能的使用權限限制在跨來源隔離的網頁上,例如 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 資源

許多使用者會定期使用本機設定的 Proxy,無論是為了存取目的 (例如共用計量連線)、病毒檢查或資料遺失防護 (DLP) 目的。中介快取正在執行 TLS 攔截

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

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

HTTP 快取的運作方式

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

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

當資源存取權因 Cookie 而異時,風險就會升高。如果未採取預防措施,中介快取可能會針對未使用 Cookie 要求的請求,傳回使用 Cookie 要求的回應。

建議你採取下列任一做法:

  • 防止中介服務快取資源。設定 Cache-Control: private
  • 設定適當的次要快取鍵。如果 Cookie 儲存憑證時,回應會因 Cookie 而有所不同,請設定 Vary: Cookie

具體來說,請變更預設行為:一律定義 Cache-ControlVary

其他注意事項

其他類似的攻擊也會使用 HTTP 快取,但這些攻擊依賴的機制與跨來源隔離機制不同。舉例來說,Jake Archibald 在「如何在 CORS 中獲勝」一文中說明瞭一些攻擊。

部分網頁瀏覽器會根據是否使用憑證要求資源回應,分割 HTTP 快取,藉此減輕這些攻擊。截至 2022 年,Firefox 會分割快取,但 Chrome 和 Safari 不會。Chrome 可能會在日後分割快取。請注意,這些攻擊與依頂層來源分割不同,但兩者互補。

即使可以為網路瀏覽器緩解這個問題,但問題仍會保留在本機 Proxy 快取中。因此,我們仍建議您按照上述建議操作。


頁首相片出處:Unsplash,圖片作者:Ben Pattinson