關於同源策略(Same-origin policy)

weixin_34194087發表於2016-08-01

同源策略是Web安全中產生的概念。在這個策略的約束下,瀏覽器可以允許一個頁面中的js程式碼訪問另一個頁面中的資料,但是要求這兩個頁面有相同的源 - 源被定義為 協議(URI scheme)、域名(hostname)和埠號(port number)的組合,比如:http://www.jianshu.com:80,瀏覽器的實現中通常會省略埠號。

Compared URL Outcome Reason
http://www.example.com/dir/page2.html Success 同源
http://www.example.com/dir2/other.html Success 同源
http://www.example.com:81/dir/other.html Failure 埠號不同
https://www.example.com/dir/other.html Failure 協議不同
http://www.abcd.com/dir/other.html Failure 域名不同

在沒有同源策略的情況下會造成嚴重的問題,比如使用者剛剛訪問了一個銀行網站(沒有退出),然後他有訪問了一個惡意網站,此時惡意網站可能會在後臺執行一個指令碼去訪問銀行網站的資料,讀取Cookie和其它敏感資料。

但是對於一些大型網站來說,同源策略是會限制網站的可能性,大型網站通常會使用多個子域名,這些子域名網頁間的資料共享就會成為問題。有幾種比較流行的方案:

  1. document.domain 如果網頁的document.domain屬性相同,那麼瀏覽器會認為這是同源的網頁
  2. Cross-Origin Resource Sharing 瀏覽器和伺服器約定的一種跨源協議
  3. Cross-document messaging 一個網頁可以通過 postMessage() 向另一個網頁傳送訊息
  4. JSONP 在Dom中動態插入一個<script/>標記請求資料
  5. WebSockets

參考:
SameOriginPolicy .wiki
Cookie 的安全隱患

相關文章