瀏覽器的同源策略
瀏覽器的同源策略
古代的楚河漢界明確規定了楚漢兩軍的活動界限,理應遵守,否則必天下大亂,而事實上天下曾大亂後又統一。這裡我們不用管這些“分久必合,合久必分”的問題,關鍵是看到這裡規定的“界限”。Web世界之所以能如此美好地呈現在我們面前,多虧了瀏覽器的功勞,不過瀏覽器不是一個花瓶——只負責呈現,它還制定了一些安全策略,這些安全策略有效地保障了使用者計算機的本地安全與Web安全。
注:
計算機的本地與Web是不同的層面,Web世界(通常稱為Internet域)執行在瀏覽器上,而被限制了直接進行本地資料(通常稱為本地域)的讀寫。
同源策略是眾多安全策略的一個,是Web層面上的策略,非常重要,如果少了同源策略,就等於楚漢兩軍沒了楚河漢界,這樣天下就大亂了。
同源策略規定:不同域的客戶端指令碼在沒明確授權的情況下,不能讀寫對方的資源。
下面分析同源策略下的這個規定,其中有幾個關鍵詞:不同域、客戶端指令碼、授權、讀寫、資源。
1.不同域或同域
同域要求兩個站點同協議、同域名、同埠,比如:表 1-1 展示了表中所列站點與是否同域的情況。
表1-1 是否同域情況
站 點 |
是否同域 |
原 因 |
不同域 |
協議不同,https與http是不同的協議 | |
不同域 |
域名不同,xeyeteam子域與www子域不同 | |
不同域 |
域名不同,頂級域與www子域不是一個概念 | |
:8080 |
不同域 |
埠不同,8080與預設的80埠不同 |
/a/ |
同域 |
滿足同協議、同域名、同埠,只是這裡多了一個目錄而已 |
從表1-1中的對比情況可以看出,我們通常所說的兩個站點同域就是指它們同源。
2.客戶端指令碼
客戶端指令碼主要指JavaScript(各個瀏覽器原生態支援的指令碼語言)、ActionScript(Flash的指令碼語言),以及JavaScript與ActionScript都遵循的ECMAScript指令碼標準。Flash提供通訊介面,使得這兩個指令碼語言可以很方便地互相通訊。客戶端的攻擊幾乎都是基於這兩個指令碼語言進行的,當然JavaScript是最廣泛的。
被打入“冷宮”的客戶端指令碼有VBScript,由於該指令碼語言相對較孤立,又有當紅的JavaScript存在,所以實在是沒有繼續存在的必要。
3.授權
一般情況下,看到這個詞,我們往往會想到服務端對客戶端訪問的授權。客戶端也存在授權現象,比如:HTML5新標準中提到關於AJAX跨域訪問的情況,預設情況下是不允許跨域訪問的,只有目標站點(假如是)明確返回HTTP響應頭:
Access-Control-Allow-Origin:
那麼站點上的客戶端指令碼就有權透過AJAX技術對上的資料進行讀寫操作。這方面的攻防細節很有趣,相關內容在後面會詳細介紹。
注:
AJAX是Asynchronous JavaScript. And XML的縮寫,讓資料在後臺進行非同步傳輸,常見的使用場景有:對網頁的區域性資料進行更新時,不需要重新整理整個網頁,以節省頻寬資源。AJAX也是駭客進行Web客戶端攻擊常用的技術,因為這樣攻擊就可以悄無聲息地在瀏覽器後臺進行,做到“殺人無形”。
4.讀寫許可權
Web上的資源有很多,有的只有讀許可權,有的同時擁有讀和寫的許可權。比如:HTTP請求頭裡的Referer(表示請求來源)只可讀,而document.cookie則具備讀寫許可權。這樣的區分也是為了安全上的考慮。
5.資源
資源是一個很廣泛的概念,只要是資料,都可以認為是資源。同源策略裡的資源是指Web客戶端的資源。一般來說,資源包括:HTTP訊息頭、整個DOM樹、瀏覽器儲存(如:Cookies、Flash Cookies、localStorage等)。客戶端安全威脅都是圍繞這些資源進行的。
注:
DOM全稱為Document Object Model,即文件物件模型,就是瀏覽器將HTML/XML這樣的文件抽象成一個樹形結構,樹上的每個節點都代表HTML/XML中的標籤、標籤屬性或標籤內容等。這樣抽象出來就大大方便了JavaScript進行讀/寫操作。Web客戶端的攻擊幾乎都離不開DOM操作。
到此,已經將同源策略的規定分析清楚,如果Web世界沒有同源策略,當你登入Gmail郵箱並開啟另一個站點時,這個站點上的JavaScript就可以跨域讀取你的Gmail郵箱資料,這樣整個Web世界就無隱私可言了。這就是同源策略的重要性,它限制了這些行為。當然,在同一個域內,客戶端指令碼可以任意讀寫同源內的資源,前提是這個資源本身是可讀可寫的。
本文節選自《web前端駭客技術揭秘》
鍾晨鳴,徐少培編著
電子工業出版社出版
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-754459/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 請描述你對瀏覽器同源策略的理解瀏覽器
- Same Origin Policy 瀏覽器同源策略詳解瀏覽器
- 瀏覽器同源策略及 Ajax 跨域解決方案瀏覽器跨域
- FE.B-理解瀏覽器的同源策略與跨域方案瀏覽器跨域
- 瀏覽器快取策略瀏覽器快取
- 快取策略之瀏覽器快取瀏覽器
- 同源策略
- 我理解的瀏覽器快取策略瀏覽器快取
- 深入剖析瀏覽器快取策略瀏覽器快取
- 徹底弄懂瀏覽器快取策略瀏覽器快取
- 同源策略詳解
- 簡易筆記:瀏覽器快取策略筆記瀏覽器快取
- 不同瀏覽器下 autoplay 的限制策略和方案的整理瀏覽器
- 瀏覽器安全策略說之內容安全策略CSP瀏覽器
- 同源策略和跨域跨域
- 前端基礎技術_瀏覽器同源政策(same-origin policy)及其規避方法前端瀏覽器
- 【瀏覽器】瀏覽器基本工作原理瀏覽器
- 前端web:瀏覽器靜態資源快取策略前端Web瀏覽器快取
- 同源策略及其解決方案
- Chrome 瀏覽器修改 UA 模擬其它瀏覽器,包括移動瀏覽器Chrome瀏覽器
- 瀏覽器瀏覽器
- Edge瀏覽器被搜狗瀏覽器篡改的解決方法瀏覽器
- Min瀏覽器: 更快更輕量瀏覽器瀏覽器
- 基石-初見瀏覽器(一):瀏覽器渲染瀏覽器
- 前端效能優化 —— 移動端瀏覽器優化策略前端優化瀏覽器
- Browser Security-同源策略、偽URL的域
- 同源策略和跨域訪問跨域
- 跨域?如何解決?同源策略?跨域
- microsoft edge是ie瀏覽器嗎 edge瀏覽器和ie瀏覽器一樣嗎ROS瀏覽器
- Edge瀏覽器的前世今生 史上最全Edge瀏覽器介紹瀏覽器
- 前端面試瀏覽器系列:瀏覽器快取前端面試瀏覽器快取
- 瀏覽器的 Event Loop瀏覽器OOP
- 瀏覽器的安全管理瀏覽器
- 瀏覽器眼中的0瀏覽器
- 什麼是微軟 Edge 瀏覽器 Tracking Prevention 的 Org Relationship Mitigation 策略微軟瀏覽器MIT
- “木偶”瀏覽器瀏覽器
- 瀏覽器核心瀏覽器
- 瀏覽器原理瀏覽器
- 瀏覽器渲染瀏覽器