成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何根治 Script Error?

開(kāi)發(fā) 新聞
本文簡(jiǎn)要介紹了 Script Error 問(wèn)題的來(lái)龍去脈,但也不局限于 Script Error,對(duì)于通用的系統(tǒng)性問(wèn)題,應(yīng)該找到系統(tǒng)性解決方案,進(jìn)而治標(biāo)治本。

Script Error 原因與當(dāng)前解法

受瀏覽器同源策略限制,未知跨域腳本執(zhí)行錯(cuò)誤時(shí),拋出的錯(cuò)誤信息為 "Script error.",導(dǎo)致開(kāi)發(fā)者無(wú)法定位具體錯(cuò)誤。為了獲取詳細(xì)錯(cuò)誤信息及堆棧,一般解法是給 Script 標(biāo)簽配置 crossorigin 屬性,同時(shí)對(duì)應(yīng)腳本服務(wù)端需配置 Access-Control-Allow-Origin 響應(yīng)頭。

另外還有一些 hack 解法,對(duì)瀏覽器原生 API 做代理,將業(yè)務(wù)代碼放在 Try Catch 作用域中執(zhí)行,但寫(xiě)好代理方法是不容易的,粗制濫造的代理方法會(huì)制造很多隱藏 Bug,并且大量 Try Catch 在一些 JS Engine 中也存在額外性能損耗,為了解決 Script Error 采用此方案得不償失。

還有什么問(wèn)題

  1. crossorigin 不好加
  2. 異步加載腳本套娃,A 加載 B,B 加載 C,以至于不知道加載了哪些外部腳本
  3. 需要服務(wù)端配合設(shè)置響應(yīng)頭 Access-Control-Allow-Origin
  4. crossorigin 加不了
  5. 外部注入代碼,如瀏覽器插件、定制 Webview 容器(xx 瀏覽器)
  6. 無(wú)效 Script Error 數(shù)據(jù),難以評(píng)估對(duì)業(yè)務(wù)實(shí)際影響,并且耗費(fèi)監(jiān)控資源

圖片

溯源:為什么是 Script Error

從 2006 年一篇安全漏洞文章說(shuō)起:I know if you're logged-in, anywhere在那個(gè)年代大量網(wǎng)站都是服務(wù)端渲染,服務(wù)端根據(jù)用戶登錄態(tài)返回不同頁(yè)面內(nèi)容,黑客通過(guò) Script 加載目標(biāo)站點(diǎn),用戶已登錄、未登錄返回的 Response 內(nèi)容不同,報(bào)錯(cuò)信息也會(huì)有差異,這樣就可以通過(guò)報(bào)錯(cuò)信息區(qū)分用戶是否登錄,進(jìn)一步展開(kāi)針對(duì)性的攻擊。

<script src= http://mail.google.com/mail/”></script>

已登錄:

 圖片

未登錄:

 圖片

對(duì)于其他站點(diǎn)也是類(lèi)似,錯(cuò)誤信息中總會(huì)有差異,比如亞馬遜登錄和未登錄,報(bào)錯(cuò)的 LineNo 不同。

基于此,WHATWG 對(duì)錯(cuò)誤信息透出制定了規(guī)范:

圖片圖片圖片Chrome 實(shí)現(xiàn):圖片

《I know if you're logged-in, anywhere》地址:https://blog.jeremiahgrossman.com/2006/12/i-know-if-youre-logged-in-anywhere.html

Script Error 規(guī)范是否能調(diào)整

通過(guò)以上信息,我們可以理解 Script Error 的設(shè)計(jì)初衷以及其合理性,但我也有疑問(wèn),在今天瀏覽器同源策略比較完善的情況下,是否有必要屏蔽所有信息(error message、lineno、colno、url)?能否將發(fā)生 Script Error 的腳本 url 暴露出來(lái),以便開(kāi)發(fā)者收集到錯(cuò)誤信息時(shí)快速定位錯(cuò)誤來(lái)源,這樣也方便評(píng)估影響面,比如明顯是注入的腳本錯(cuò)誤,直接忽略即可。翻閱 WHATWG Github 歷史 issue,發(fā)現(xiàn)已經(jīng)有過(guò)相關(guān)討論,很明確答案是 No,大概原因是當(dāng)前的同源策略已經(jīng)很全面(復(fù)雜),不想在挖坑。以至于對(duì) unhanlderejection,連 Script Error 都不愿意報(bào)。

圖片

相關(guān)討論地址:https://github.com/whatwg/html/issues/2440

unhanlderejection地址:https://github.com/whatwg/html/issues/5051

其他大廠如何處理 Script Error

我在幾個(gè)大廠網(wǎng)站上做了測(cè)試,加載一個(gè)第三方腳本,第三方腳本一定會(huì)報(bào)錯(cuò),看看對(duì)應(yīng)站點(diǎn)如何處理。

var s = document.createElement('script'); 
s.src = 'https://g.alicdn.com/dinamic/h5-tb-cart/5.0.41/index.min.js';
document.body.appendChild(s);

圖片

圖片

圖片

圖片

圖片

  1. Google:常規(guī)處理,直接上報(bào) Script Error
  2. Twitter:   通過(guò) CSP 策略攔截了未知腳本加載,包括 Github、FaceBook 都采用類(lèi)似方案
  3. QQ 視頻:除了上報(bào) Script Error,并監(jiān)控上報(bào)異步加載的腳本

面向未來(lái)我們應(yīng)該如何處理 Script Error

面向未來(lái)看問(wèn)題,我們不能與標(biāo)準(zhǔn)背道而馳,同源策略是當(dāng)前解決 Web 安全問(wèn)題的重要手段,在未來(lái)只會(huì)更完善,我們應(yīng)該積極了解與應(yīng)用。當(dāng)前國(guó)內(nèi)互聯(lián)網(wǎng)對(duì)同源策略的了解與應(yīng)用大多止步于 Access-Control-Allow-Origin: *,這是遠(yuǎn)遠(yuǎn)不夠的。

因此,面向未來(lái) Script Error 問(wèn)題 Twitter 的處理方式相對(duì)合理,只允許站點(diǎn)加載白名單腳本,對(duì)白名單腳本逐個(gè)做 CrossOring 等配置,同時(shí)也杜絕了外部腳本注入。對(duì)于淘寶來(lái)說(shuō),受限于業(yè)務(wù)體量以及歷史包袱,做這種改造難度可想而知,但我們應(yīng)該朝這個(gè)方向努力,而不是讓開(kāi)發(fā)者面對(duì) Script Error 手足無(wú)措,靠猜測(cè)或是加錯(cuò)誤過(guò)濾解決問(wèn)題。

回到當(dāng)下,短期的解決方案要增強(qiáng)跨域腳本的感知能力,可以配置 CSP Report Only 上報(bào)跨域腳本,也可以通過(guò)原始手段統(tǒng)計(jì),進(jìn)而對(duì)相關(guān)腳本做跨域配置,對(duì)于明顯的跨域腳本如埋點(diǎn)、喚端、以及安全系列腳本,缺少 crossorigin 的盡快修復(fù)。

CSP Report Only地址:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only

document.querySelectorAll('script[src]:not([crossorigin])')

本文簡(jiǎn)要介紹了 Script Error 問(wèn)題的來(lái)龍去脈,但也不局限于 Script Error,對(duì)于通用的系統(tǒng)性問(wèn)題,應(yīng)該找到系統(tǒng)性解決方案,進(jìn)而治標(biāo)治本。?

責(zé)任編輯:張燕妮 來(lái)源: 大淘寶技術(shù)
相關(guān)推薦

2020-07-09 10:15:55

空值Bug語(yǔ)言

2021-11-22 14:54:36

Kubernetes存儲(chǔ)

2021-12-29 15:55:34

安全數(shù)據(jù)信息安全

2021-04-21 10:09:47

網(wǎng)絡(luò)安全信息安全大數(shù)據(jù)

2016-12-27 19:26:43

2021-06-25 22:10:41

區(qū)塊鏈盜版技術(shù)

2020-11-24 10:13:01

區(qū)塊鏈盜版

2018-10-05 23:03:23

2021-04-01 08:20:25

互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)

2018-03-07 17:00:51

2009-08-02 17:39:06

2018-08-15 16:04:59

云服務(wù)區(qū)塊鏈分布式

2020-03-25 09:32:01

瀏覽器 Chrome Google

2013-06-19 10:35:39

2010-03-19 09:11:56

Windows 7雙硬盤(pán)自動(dòng)關(guān)閉

2014-03-06 16:56:14

2021-09-26 00:24:58

開(kāi)發(fā)項(xiàng)目TypeScript

2019-07-28 18:30:52

MySQL日志數(shù)據(jù)庫(kù)

2017-08-04 14:07:24

銳捷

2019-05-09 09:28:14

微軟瀏覽器Chrome
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品毛片在线 | 日本不卡一区 | 国产综合精品一区二区三区 | 一级片av| 亚洲精品乱码久久久久久久久久 | 一级毛片免费看 | 欧美成人一区二区三区片免费 | 日本在线视频一区二区 | 精品伦精品一区二区三区视频 | 久久久久久久久久久久久久av | 精品视频一区二区 | 成人免费观看视频 | 性生生活大片免费看视频 | 国产精品区一区二区三 | 一级做a爰片久久毛片免费看 | 欧美簧片| 奇色影视 | 午夜视频在线免费观看 | 亚洲免费观看视频网站 | 日本人和亚洲人zjzjhd | 欧美 日韩 亚洲91麻豆精品 | 国产精品99久久久久久www | 欧美9999 | 久在草| 欧美成人视屏 | 久久中文字幕一区 | 国产视频久 | 久久99精品久久久久久国产越南 | 五月婷婷在线播放 | 久久成人免费视频 | 福利一区在线观看 | 91亚洲精品在线观看 | 欧美成人精品二区三区99精品 | 婷婷久久综合 | 色黄视频在线 | 国产一区二区在线免费视频 | 在线国产一区 | 国产激情亚洲 | 久久黄视频| 日韩中文一区 | 犬夜叉在线观看 |