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

如何根治 Script Error?

開發 新聞
本文簡要介紹了 Script Error 問題的來龍去脈,但也不局限于 Script Error,對于通用的系統性問題,應該找到系統性解決方案,進而治標治本。

Script Error 原因與當前解法

受瀏覽器同源策略限制,未知跨域腳本執行錯誤時,拋出的錯誤信息為 "Script error.",導致開發者無法定位具體錯誤。為了獲取詳細錯誤信息及堆棧,一般解法是給 Script 標簽配置 crossorigin 屬性,同時對應腳本服務端需配置 Access-Control-Allow-Origin 響應頭。

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

還有什么問題

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

圖片

溯源:為什么是 Script Error

從 2006 年一篇安全漏洞文章說起:I know if you're logged-in, anywhere在那個年代大量網站都是服務端渲染,服務端根據用戶登錄態返回不同頁面內容,黑客通過 Script 加載目標站點,用戶已登錄、未登錄返回的 Response 內容不同,報錯信息也會有差異,這樣就可以通過報錯信息區分用戶是否登錄,進一步展開針對性的攻擊。

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

已登錄:

 圖片

未登錄:

 圖片

對于其他站點也是類似,錯誤信息中總會有差異,比如亞馬遜登錄和未登錄,報錯的 LineNo 不同。

基于此,WHATWG 對錯誤信息透出制定了規范:

圖片圖片圖片Chrome 實現:圖片

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

Script Error 規范是否能調整

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

圖片

相關討論地址:https://github.com/whatwg/html/issues/2440

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

其他大廠如何處理 Script Error

我在幾個大廠網站上做了測試,加載一個第三方腳本,第三方腳本一定會報錯,看看對應站點如何處理。

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:常規處理,直接上報 Script Error
  2. Twitter:   通過 CSP 策略攔截了未知腳本加載,包括 Github、FaceBook 都采用類似方案
  3. QQ 視頻:除了上報 Script Error,并監控上報異步加載的腳本

面向未來我們應該如何處理 Script Error

面向未來看問題,我們不能與標準背道而馳,同源策略是當前解決 Web 安全問題的重要手段,在未來只會更完善,我們應該積極了解與應用。當前國內互聯網對同源策略的了解與應用大多止步于 Access-Control-Allow-Origin: *,這是遠遠不夠的。

因此,面向未來 Script Error 問題 Twitter 的處理方式相對合理,只允許站點加載白名單腳本,對白名單腳本逐個做 CrossOring 等配置,同時也杜絕了外部腳本注入。對于淘寶來說,受限于業務體量以及歷史包袱,做這種改造難度可想而知,但我們應該朝這個方向努力,而不是讓開發者面對 Script Error 手足無措,靠猜測或是加錯誤過濾解決問題。

回到當下,短期的解決方案要增強跨域腳本的感知能力,可以配置 CSP Report Only 上報跨域腳本,也可以通過原始手段統計,進而對相關腳本做跨域配置,對于明顯的跨域腳本如埋點、喚端、以及安全系列腳本,缺少 crossorigin 的盡快修復。

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

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

本文簡要介紹了 Script Error 問題的來龍去脈,但也不局限于 Script Error,對于通用的系統性問題,應該找到系統性解決方案,進而治標治本。?

責任編輯:張燕妮 來源: 大淘寶技術
相關推薦

2020-07-09 10:15:55

空值Bug語言

2021-11-22 14:54:36

Kubernetes存儲

2021-12-29 15:55:34

安全數據信息安全

2021-04-21 10:09:47

網絡安全信息安全大數據

2016-12-27 19:26:43

2021-06-25 22:10:41

區塊鏈盜版技術

2020-11-24 10:13:01

區塊鏈盜版

2018-10-05 23:03:23

2018-03-07 17:00:51

2021-04-01 08:20:25

互聯網數據技術

2009-08-02 17:39:06

2018-08-15 16:04:59

云服務區塊鏈分布式

2020-03-25 09:32:01

瀏覽器 Chrome Google

2013-06-19 10:35:39

2010-03-19 09:11:56

Windows 7雙硬盤自動關閉

2014-03-06 16:56:14

2017-08-04 14:07:24

銳捷

2019-05-09 09:28:14

微軟瀏覽器Chrome

2021-09-26 00:24:58

開發項目TypeScript

2016-08-11 09:19:36

AndroidService通訊應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日日夜夜免费精品 | 国产一区二 | 中文亚洲字幕 | 男女激情网 | 欧美电影网 | 天天玩天天干天天操 | 国产精品一区二区三区四区 | 国产一区二区三区四区在线观看 | 中文字幕一区二区三区不卡在线 | 欧美激情一区二区 | 久久精品亚洲精品国产欧美 | 午夜丁香视频在线观看 | 亚洲精品一区二区三区中文字幕 | 美女网站视频免费黄 | 欧美精品91 | 亚洲一区视频在线 | 国产色在线 | 99免费看 | 成人午夜影院 | 天天操夜夜操 | 日本精品视频在线 | 久草热视频 | 日韩精品1区2区3区 国产精品国产成人国产三级 | 日韩在线一区二区 | 黑人中文字幕一区二区三区 | 久久久久久一区 | 欧美炮房| 91av在线看 | 国产久| 国产一区在线免费 | 精品视频一区二区三区在线观看 | 国产精品久久久久久久久久了 | 99久久精品国产一区二区三区 | 国产欧美一区二区三区在线看蜜臀 | 亚洲一区二区视频 | 久久成人精品视频 | 一区二区三区视频免费看 | 成人av免费 | 一区二区免费 | 成人性生交大片免费看中文带字幕 | 免费在线性爱视频 |