[轉]HTML5 script 標簽的 crossorigin 屬性到底有什么用?


HTML5 script 標簽的 crossorigin 屬性到底有什么用?

 

 

 

看起來比以前的寫法復雜好多的樣子。先不着急慢慢看,多了一個 integrity 屬性,看值的樣子就知道是用來驗證文件完整性的。另外還有一個 crossorigin 屬性……怎么?直接通過 script 標簽加載網站外 JS 資源也要開始考慮跨域的問題了嗎?

這里不討論 script 里 crossorigin 屬性怎么用,以及服務器端如何支持此屬性,MDN 上的文檔已經說得很清楚。

不知道大家對此新屬性的感覺如何,我的第一感覺是:新加了這么一個屬性,難道是以前 script 不用 crossorigin 屬性的時候,會出什么問題嗎?到底可能會出什么問題呢?

從谷歌的結果來看,比較一致的說法是,引入跨域的腳本(比如用了 apis.google.com 上的庫文件),如果這個腳本有錯誤,因為瀏覽器的限制(根本原因是協議的規定),是拿不到錯誤信息的。當本地嘗試使用 window.onerror 去記錄腳本的錯誤時,跨域腳本的錯誤只會返回 Script error

script error

但 HTML5 新的規定,是可以允許本地獲取到跨域腳本的錯誤信息,但有兩個條件:一是跨域腳本的服務器必須通過 Access-Controll-Allow-Origin 頭信息允許當前域名可以獲取錯誤信息,二是當前域名的 script 標簽也必須指明 src 屬性指定的地址是支持跨域的地址,也就是 crossorigin 屬性。

cor script error

但事情還是不夠明朗,看起來報個錯也沒什么啊,為什么瀏覽器或者說協議這么龜毛,非要規定默認頁面是不能獲取跨域腳本錯誤信息的呢?

這其實跟網絡安全有關,不妨舉一個例子來說明。

我們先假設瀏覽器默認可以將跨域腳本的錯誤信息返回。

這個時候我在我的博客里寫下如下代碼:

 

 

注意 src 里面提到地址,都是 HTML 頁面的地址,當成 JS 來執行,肯定是會報錯的。

因為我們假設瀏覽器能報具體錯誤,這個錯誤可能是類似於:

1. “請登錄” is undefined.
2. “您好” is undefined.

我們通過報錯信息的不一致,可能可以推斷出當前訪問我博客的會員在某某銀行是否有賬號。雖然不是什么大問題,但隱私的確是泄漏了,如果我是攻擊者我可能會通過會員在某家銀行有賬號,『精准』推送相關的釣魚網站給他。

說清楚了來龍去脈,我們就可以更好的判斷,我們是否真的需要給 script 標簽加上 crossorigin 屬性了。另外除了 script,所有能引入跨域資源的標簽包括 link 和 img 之類,都有一樣的屬性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM