SharedArrayBuffer 及其跨域下的使用

什么是跨域

跨域問題是前端開發(fā)人員面前繞不過去的問題蒋困。
所謂跨域翻擒,通俗點(diǎn)表達(dá),就是當(dāng)前站點(diǎn)汪拥,請(qǐng)求或加載了其他域名的資源达传。
比如當(dāng)前 app.a.com 請(qǐng)求了 file.b.com 的資源,就產(chǎn)生了跨域資源的加載迫筑。

瀏覽器在渲染當(dāng)前頁面時(shí)宪赶,校驗(yàn)網(wǎng)頁請(qǐng)求的資源是否可以安全的在當(dāng)前頁面使用。
比如:

  1. 是同站點(diǎn)下的資源铣焊,比如 app.a.com/logo.png逊朽,可以直接使用
  2. 如果是同域名下的資源,比如 file.a.com/logo.png, 這時(shí)會(huì)校驗(yàn)文件的響應(yīng)頭曲伊,看有沒有配置 Access-Control-Allow-* 相關(guān)的訪問控制參數(shù)
  3. 如果是 file.b.com/logo.png 同樣也會(huì)去校驗(yàn)訪問控制信息信息

如果資源的訪問控制信息不能表面資源可以在當(dāng)前站點(diǎn)使用叽讳,就會(huì)產(chǎn)生跨域的問題追他,瀏覽器會(huì)禁止資源的加載和展示。
也就是說跨域問題其實(shí)是瀏覽器對(duì)資源使用安全策略產(chǎn)生的岛蚤,瀏覽器要保證站點(diǎn)訪問資源是安全邑狸,合法訪問的。

瀏覽器是否可以使用某個(gè)資源有兩個(gè)限制:

  1. 當(dāng)前站點(diǎn)是否允許使用其他站點(diǎn)涤妒,域名的資源
    站點(diǎn)可以配置是否允許訪問其他域名的資源单雾,比如在站點(diǎn)配置一些安全策略
# COEP 跨域嵌入策略,會(huì)阻止頁面加載任何未明確授予文檔許可權(quán)的跨域資源(使用CORP或CORS)她紫。
Cross-Origin-Embedder-Policy: require-corp
# COOP 
Cross-Origin-Opener-Policy: same-origin

  1. 請(qǐng)求的資源是否可以在當(dāng)前站點(diǎn)使用
    資源是否開啟了跨域資源共享策略硅堆,決定資源在哪些站點(diǎn)可以被使用,一般解決跨域的時(shí)候贿讹,需要在資源的響應(yīng)頭中配置以下選項(xiàng)
# 跨域資源策略
Cross-Origin-Resource-Policy: same-site | same-origin | cross-origin
# cross-origin 表示該資源被任何站點(diǎn)使用

# 允許通過哪些方法訪問
Access-Control-Allow-Methods: GET | POST | PUT | OPTIONS | HEAD

# 允許哪些域名訪問渐逃, * 代表所有,一般來說不安全
Access-Control-Allow-Origin: *

什么是 SharedArrayBuffer

SharedArrayBuffer(以下簡(jiǎn)稱 SAB) 是一個(gè) javascript 對(duì)象民褂,用于網(wǎng)站線程之間的內(nèi)存數(shù)據(jù)共享茄菊,比如 worker。同樣由于 WebAssembly 使用 worker 模擬了多線程赊堪,所以在這種情況下同樣會(huì)使用到 SAB 做數(shù)據(jù)共享訪問面殖。

為什么使用 SAB 會(huì)遇到跨域問題

18年 spectre 曝光之前,已經(jīng)有不少網(wǎng)站使用了 SAB哭廉。由于 spectre 是 cpu 層面的漏洞脊僚,不太可能通過cpu 升級(jí)去解決,因此當(dāng)時(shí)所有瀏覽器直接禁用了 SAB遵绰,來防止 spectre 的旁路攻擊吃挑。
那么什么是 spectre 攻擊,用通俗一點(diǎn)的話來說街立,就是 cpu 有一個(gè)機(jī)制,叫做預(yù)測(cè)機(jī)制埠通,假如有一個(gè)惡意程序去查詢一個(gè)沒有權(quán)限的信息赎离,操作系統(tǒng)會(huì)返回禁止的信息,本身來說這個(gè)邏輯當(dāng)然沒有問題端辱。但是當(dāng)惡意程序詢問時(shí)梁剔,其實(shí)操作系統(tǒng)即使返回了禁止的信息,但是還是會(huì)因?yàn)轭A(yù)測(cè)機(jī)制會(huì)去執(zhí)行正確答案的邏輯舞蔽,會(huì)導(dǎo)致慢了一小段時(shí)間荣病,比如幾微秒,幾毫米渗柿,這就被惡意程序注意到了个盆,通過每隔一段時(shí)間不斷去嘗試詢問脖岛,達(dá)到獲取正確答案的效果。
惡意程序可以通過 SAB 獲取到其他頁面的敏感信息颊亮。我們都知道 worker 在瀏覽器中有很大的限制柴梆,比如不能訪問 window, document 對(duì)象, SAB 是用來和主線程進(jìn)行數(shù)據(jù)交換訪問的高效方法终惑,也被大量應(yīng)用绍在,這就會(huì)導(dǎo)致 worker 是有辦法通過 SAB 攻擊獲取到主線程的敏感信息。
所以在 spectre 漏洞曝出時(shí)雹有,幾乎所有主流瀏覽器都默認(rèn)關(guān)閉了 SAB 以應(yīng)對(duì)這個(gè)漏洞的攻擊偿渡。

如何解決

SAB 作為 WebAssembly(wasm) 模擬多線程的基礎(chǔ)組件,如果不能使用霸奕,將會(huì)對(duì) wasm 在某些應(yīng)用場(chǎng)景的性能大幅下降溜宽。重新啟用是勢(shì)在必行。
在 chrome 92 之前铅祸, chrome 是默認(rèn)開啟 SAB 的坑质,但是已經(jīng)彈出警告信息提示 SAB 將會(huì)在 92 版本必須啟用以下選項(xiàng):

# COEP 跨域嵌入策略,會(huì)阻止頁面加載任何未明確授予文檔許可權(quán)的跨域資源(使用CORP或CORS)临梗。
Cross-Origin-Embedder-Policy: require-corp
# COOP 
Cross-Origin-Opener-Policy: same-origin

也就是說加載的資源必須有 corp 策略的頭信息涡扼, 跨域打開者也是同域名

相關(guān)資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盟庞,隨后出現(xiàn)的幾起案子吃沪,更是在濱河造成了極大的恐慌,老刑警劉巖什猖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件票彪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡不狮,警方通過查閱死者的電腦和手機(jī)降铸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摇零,“玉大人推掸,你說我怎么就攤上這事∽そ觯” “怎么了谅畅?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)噪服。 經(jīng)常有香客問我毡泻,道長(zhǎng),這世上最難降的妖魔是什么粘优? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任仇味,我火速辦了婚禮呻顽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邪铲。我一直安慰自己芬位,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布带到。 她就那樣靜靜地躺著昧碉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揽惹。 梳的紋絲不亂的頭發(fā)上被饿,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音搪搏,去河邊找鬼狭握。 笑死,一個(gè)胖子當(dāng)著我的面吹牛疯溺,可吹牛的內(nèi)容都是我干的论颅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼囱嫩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼恃疯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起墨闲,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤今妄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鸳碧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盾鳞,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年瞻离,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腾仅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡套利,死狀恐怖攒砖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情日裙,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布惰蜜,位于F島的核電站昂拂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏抛猖。R本人自食惡果不足惜格侯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一鼻听、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧联四,春花似錦撑碴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至收苏,卻和暖如春亿卤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹿霸。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工排吴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懦鼠。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓钻哩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親肛冶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子街氢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容