繁體中文

影片與字幕·直接媒體下載器

Web 瀏覽器中同源策略與 CORS 的簡短歷史

· 背景

科爾斯 網路歷史記錄 安全

早期瀏覽器起源演變成受控的跨域 HTTP 訪問
原始 ToolAcre 向量圖

阻止瀏覽器工具自由讀取其他網站檔案的規則可以追溯到最早的腳本瀏覽器。這篇文章追蹤了同源策略、XMLHttpRequest 和 CORS 標準,它們最終使受控的跨站點獲取成為可能。

為什麼瀏覽器拒絕將其剛收到的位元組交給您自己的分頁 - 幾十年前規則的日常影響

瀏覽器可以顯示遠端檔案,但拒絕將該回應正文提供給頁面 JavaScript。明顯的矛盾是導航和程序化跨域閱讀之間的安全分離。

Direct Media Downloader 遇到該規則,因為它必須將區塊讀入 Blob。本機保存連結可以在 Fetch 失敗的情況下工作,因為它遵循不同的瀏覽器路徑。拒絕保護瀏覽器中其他地方的 cookie 和 Intranet 資源,即使這個特定的下載程式故意省略自己的呼叫中的憑證。即使此特定請求省略了憑證,邊界也會保護同一瀏覽器中不相關的 cookie 和 Intranet 頁面。

Netscape、JavaScript 和第一源規則 — 引發同源策略的安全性問題

早期的網路腳本需要阻止一個網站透過訪客的環境存取來讀取另一個網站的敏感頁面。瀏覽器圍繞著起源組織邊界。

歷史細節因實作而異,因此實際繼承最重要:方案、主機和連接埠為腳本可讀資源定義信任區間。將來源視為一個單元是一種工程邊界,可以跨檔案、腳本和網路 API 一致地強制執行。來源分組提供了一個可執行的單元,瀏覽器引擎可以將其應用於檔案、腳本、儲存和網路回應。該模型並不完美,但為開發人員提供了可預測的預設設置,而不是不受限制的環境權限。

XMLHttpRequest 與隔離的 Web — 腳本化請求如何繼承規則以及混搭為何舉步維艱

XMLHttpRequest 啟用後台 HTTP 工作,但保留來源限制。這使得同網站應用程式變得有用,而跨網站混搭則需要合作或伺服器中介。

通用客戶端覆蓋會破壞保護。擁有目標的伺服器需要一種方式來表達哪些外部來源可以讀取選定的回應。伺服器中繼成為常見的解決方法,但它們將信任、頻寬和請求偽造風險轉移到瀏覽器沙箱之外的基礎架構。中繼解決方法將頻寬、信任和伺服器端請求偽造風險轉移到客戶端沙箱之外,而不是消除該策略。當有意部署這些中介機構時,它們需要自己的安全、隱私和濫用控制。

CORS 標準 — 存取控制標頭如何讓伺服器在不放鬆預設設定的情況下選擇跨來源讀取

CORS 透過瀏覽器解釋的 HTTP 回應標頭提供這種協作。 `Access-Control-Allow-Origin` 可以授權請求來源,或在適當的無憑證情況下,授權更廣泛的受眾。

此機制不會全域停用同源策略。它向主機選擇在協定下公開回應的回應授予範圍內的讀取存取權限。瀏覽器可以根據協議規則快取預檢結果,因此審核不應從一條熱追蹤中推斷出「從未發生過策略檢查」。這保留了預設隔離,同時允許資源擁有者為選定的呼叫者和方法發布故意的異常。

預檢、簡單請求和不透明回應-解釋大多數下載失敗的詞彙

有些跨來源請求非常簡單,不需要預檢;其他人先發送 OPTIONS 來詢問是否允許方法和標頭。預檢是協商,而不是實際的媒體傳輸。

不透明回應源自 no-cors 模式,並隱藏腳本中的狀態、標頭和正文。 ToolAcre 不選擇該模式,因為不可讀的正文無法成為預期的可保存 Blob。 CORS 錯誤可能與成功的伺服器端請求共存,這進一步說明了應用程式失敗並不意味著來源端沒有收到任何資訊。快取的預檢決策​​可以改變一個溫暖追蹤中出現的內容,因此歷史上沒有 OPTIONS 並不能證明協商從未存在過。

CORS 對於純瀏覽器下載器意味著什麼 — 主機決定,工具無法覆蓋,誠實地對待這一點才是正確的回應

對於此下載器,主機決定 HEAD 和 GET 回應是否可讀。 ToolAcre 無法代表主機附加允許來源回應標頭,而且它不會透過其自己的來源中繼正文。

此錯誤結合了 CORS 和網路可能性,因為 Fetch 在某些故障中故意保留細粒度資訊。 DevTools 向訪客展示的內容可能比應用程式程式碼接收到的內容更多。主機操作員應僅授權預期的來源、方法和標頭,然後驗證其確切的生產回應,而不是依賴本地配置意圖。阻塞讀取可能與接收請求的伺服器共存,這就是為什麼介面永遠不會將應用程式故障與無聯繫等同起來。

重點:一條即使讓你煩惱也能保護你的規則——直接媒體下載器如何在其中而不是圍繞它工作

即使該規則阻礙了合法檔案傳輸,它也能保護使用者。希望瀏覽器應用程式讀取公共媒體的主機可以配置適當的 CORS 回應;不透過此腳本路徑仍然無法存取的一個。

Direct Media Downloader 在該模型內工作:本地驗證、公開請求、解釋拒絕並建議在適當的情況下進行本機保存。它不會將瀏覽器安全邊界轉變為繞過問題。了解這段歷史會將任意瀏覽器敵意造成的錯誤轉變為預設拒絕跨站點讀取模型的可見後果。原始所有者應該測試預期方法的確切生產標頭,而不是僅依賴儀表板配置。