跨域,不止 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