跨域,不止 CORS

我們通常提到跨域問題的時候,相信大家首先會想到的是 CORS(跨源資源共享),其實 CORS 只是衆多跨域訪問場景中安全策略的一種,類似的策略還有:

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 的工作方式。網站可以從服務器請求兩種類型的資源:

使用 CORS 頭,如 Access-Control-Allow-Origin: * ,網站能夠從自己的來源或其他來源接收數據資源。另一方面,媒體資源可以來自任何來源,即使沒有允許的 CORS 頭。'

如果發生以下情況,CORB 會阻止渲染器進程接收跨域數據資源(即 HTML,XML或JSON):

如果跨域數據資源未設置 X-Content-Type-Options: nosniff Header,則 CORB 嘗試嗅探響應主體以確定它是 HTML,XML 還是 JSON。這是必需要做的的,因爲某些 Web 服務器配置不正確,例如將圖像配置爲 text/html

使用 CORB 策略

爲了使我們的網站更加安全,建議所有網站都開啓 CORB,只需要下面的操作:

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/4Fx36DwZ1Vhhx-brtintSQ