跨域,不止 CORS
我們通常提到跨域問題的時候,相信大家首先會想到的是 CORS(跨源資源共享),其實 CORS 只是衆多跨域訪問場景中安全策略的一種,類似的策略還有:
-
COEP: Cross Origin Embedder Policy:跨源嵌入程序策略 -
COOP: Cross Origin Opener Policy:跨源開放者政策 -
CORP: Cross Origin Resource Policy:跨源資源策略 -
CORB: Cross Origin Read Blocking:跨源讀取阻止
COEP、COOP 這兩個新策略我已經在前面的文章中介紹過了,感興趣的可以看新的跨域策略:使用 COOP、COEP 爲瀏覽器創建更安全的環境
今天,我來給大家介紹一下 CORB: Cross Origin Read Blocking (跨源讀取阻止)
站點隔離
互聯網是一個非常複雜多樣的環境,我們可以在上面做各種事情,有的時候我們在上面存錢、有的時候在上面看視頻,但是你肯定不希望看視頻的網站知道你存了多少錢,所以在瀏覽器中不同來源的站點不能互相訪問,我們熟悉的另一個名稱是:同源策略。
但是很多惡意網站會通過各種巧妙的手段繞過這個限制,站點隔離是 Chrome 中的一項安全功能,它提供了額外的防護措施,可以降低此類攻擊成功的可能性。
它可以確保始終將來自不同網站的頁面置於不同的流程中,每個流程都在沙箱中運行,以限制流程的執行範圍。它還阻止了從其他站點接收某些類型的敏感數據的過程。
跨域讀取阻止
即使所有不同源的頁面都處於自己單獨的進程中,頁面仍然可以合法的請求一些跨站的資源,例如圖片和 JavaScript 腳本,有些惡意網頁可能通過 <img> 元素來加載包含敏感數據的 JSON 文件:
<img src="https://your-bank.example/balance.json">
<!-- Note: the attacker refused to add an `alt` attribute, for extra evil points. -->
如果沒有 站點隔離 ,則 JSON 文件的內容會保存到渲染器進程的內存中,此時,渲染器會注意到它不是有效的圖像格式,並且不會渲染圖像。但是,攻擊者隨後可以利用 Spectre 之類的漏洞來潛在地讀取該內存塊。
Spectre漏洞我也在這片文章介紹過了 新的跨域策略:使用 COOP、COEP 爲瀏覽器創建更安全的環境
攻擊者可以使用 <img> 而不是使用 <script> 來將敏感數據提交到內存:
<script src="https://your-bank.example/balance.json"></script>
跨域讀取阻止(CORB)是一項安全功能,它可以根據其 MIME 類型防止 balance 內容進入渲染器進程內存中。
我們看一下 CORB 的工作方式。網站可以從服務器請求兩種類型的資源:
-
數據資源,例如
HTML,XML或JSON文檔 -
媒體資源,例如圖像,
JavaScript,CSS或字體
使用 CORS 頭,如 Access-Control-Allow-Origin: * ,網站能夠從自己的來源或其他來源接收數據資源。另一方面,媒體資源可以來自任何來源,即使沒有允許的 CORS 頭。'
如果發生以下情況,CORB 會阻止渲染器進程接收跨域數據資源(即 HTML,XML或JSON):
-
資源具有
X-Content-Type-Options: nosniff Header -
CORS並未明確允許訪問資源
如果跨域數據資源未設置 X-Content-Type-Options: nosniff Header,則 CORB 嘗試嗅探響應主體以確定它是 HTML,XML 還是 JSON。這是必需要做的的,因爲某些 Web 服務器配置不正確,例如將圖像配置爲 text/html。
使用 CORB 策略
爲了使我們的網站更加安全,建議所有網站都開啓 CORB,只需要下面的操作:
-
配置正確的
Content-Type。(例如,HTML資源設置text/html)。 -
開啓
X-Content-Type-Options: nosniff來防止站點進行自動MIME嗅探
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/4Fx36DwZ1Vhhx-brtintSQ