跨來源資源政策(CORP)
跨來源資源政策是透過 Cross-Origin-Resource-Policy
HTTP 標頭設定的一項政策,允許網站和應用程式選擇保護自己免受其他來源(例如使用 <script>
和 <img>
元素發出的請求)的某些請求,以減輕推測性側信道攻擊(例如幽靈漏洞)以及跨網站腳本包含攻擊。
CORP 是超越預設的同源政策的另一層保護。跨來源資源政策補充了跨來源讀取封鎖(CORB),這是一種防止某些跨來源讀取的機制。
备注:
此政策僅對 no-cors
請求有效,這些請求是對列入 CORS 白名單的方法/標頭預設發出的。
由於此政策是通過回應標頭表達的,實際請求不會被阻止——相反,瀏覽器通過剝離回應主體來防止結果洩漏。
使用方式
备注: 由於 Chrome 中的錯誤,設置 Cross-Origin-Resource-Policy 可能會破壞 PDF 渲染,導致訪客無法閱讀部分 PDF 的後續頁面。在生產環境中使用此標頭時請謹慎。
Web 應用程式通過 Cross-Origin-Resource-Policy
HTTP 回應標頭設置跨來源資源政策,該標頭接受下方三個值之一:
same-site
-
只有來自同一站點的請求可以讀取資源。
same-origin
-
只有來自相同來源(即方案 + 主機 + 通訊埠)的請求可以讀取資源。
cross-origin
-
來自任何來源(包括同站點和跨站點)的請求都可以讀取資源。這在使用 COEP 時很有用(見下文)。
Cross-Origin-Resource-Policy: same-site | same-origin | cross-origin
在跨來源資源政策檢查期間,如果設置了標頭,瀏覽器將拒絕來自不同來源/站點的 no-cors
請求。
與跨來源嵌入政策(COEP)的關係
當文件使用 Cross-Origin-Embedder-Policy
HTTP 回應標頭時,可以要求子資源要麼與文件同源,要麼帶有 Cross-Origin-Resource-Policy
HTTP 回應標頭,以表明它們可以被嵌入。這就是 cross-origin
值存在的原因。
歷史
這一概念最初於 2012 年提出(作為 From-Origin
),但在 2018 年第二季度復活並在 Safari 和 Chromium 中實施。
2018 年初,兩個名為 Meltdown 和 Spectre 的側信道硬體漏洞被披露。這些漏洞由於推測執行功能中的競爭條件導致敏感數據洩漏,而推測執行旨在提高性能。
作為回應,Chromium 推出了 Cross-Origin Read Blocking,自動保護某些資源(Content-Type
為 HTML、JSON 和 XML)免受跨來源讀取。如果應用程式未提供 no-sniff
指令,Chromium 將嘗試猜測 Content-Type
並應用保護。
Cross-Origin-Resource-Policy
是一個選擇性啟用的回應標頭,可以保護任何資源;瀏覽器無需嗅探 MIME 類型。
規範
Specification |
---|
Fetch Standard # cross-origin-resource-policy-header |
瀏覽器相容性
BCD tables only load in the browser
參見
Cross-Origin-Resource-Policy
HTTP 標頭