1. 程式人生 > >Web:簡述"跨域"的概念與造成原因

Web:簡述"跨域"的概念與造成原因

Web:簡述"跨域"的概念與造成原因

一、什麼是跨域?


   當協議、子域名、主域名、埠號中任意一個不相同時,都算作不同域。不同域之間相互請求資源,就算作"跨域"。

注意
      1.跨域並不是請求發不出去,請求能發出去,服務端能收到請求並正常返回結果,只是結果被瀏覽器攔截了。
      2.如果是協議和埠造成的跨域問題“前臺”是無能為力的。
      3.在跨域問題上,域僅僅是通過“URL的首部”來識別而不會根據域名對應的IP地址是否相同來判斷。“URL的首部”可以理解為“協議, 域名和埠必須匹配”。
      4.有三個標籤(帶"src"屬性)是允許跨域載入資源:< img src=XXX> ;< link href=XXX> ;< script src=XXX>

二、造成跨域的兩種策略

   瀏覽器的同源策略是一個用於隔離潛在惡意檔案的關鍵的安全機制。它的存在可以保護使用者隱私資訊,防止身份偽造等(讀取Cookie),但是會導致跨域,這裡同源策略又分為以下兩種:

      1.DOM同源策略:禁止對不同源頁面DOM進行操作。這裡主要場景是iframe跨域的情況,不同域名的iframe是限制互相訪問的。
      2.XmlHttpRequest同源策略:禁止使用XHR物件向不同源的伺服器地址發起HTTP請求。

三、跨域限制的原因

   跨域限制主要是為了安全考慮。
      1.AJAX同源策略主要用來防止CSRF攻擊。如果沒有AJAX同源策略,相當危險,我們發起的每一次HTTP請求都會帶上請求地址對應的cookie,那麼可以做如下攻擊:

         a.使用者登入了自己的銀行頁面 http://mybank.comhttp://mybank.com 向用戶的cookie中新增使用者標識。
         b.使用者瀏覽了惡意頁面

http://evil.com 。執行了頁面中的惡意AJAX請求程式碼。http://evil.com 向http: //mybank.com 發起惡意AJAX HTTP請求,請求會預設把http://mybank.com對應cookie也同時傳送過去。銀行頁面從傳送的cookie中提取使用者標識,驗證使用者無誤,response中返回請求資料。此時資料就洩露了。
而且由於Ajax在後臺執行,使用者無法感知這一過程。
      2.DOM同源策略也一樣,如果iframe之間可以跨域訪問,可以這樣攻擊:
         做一個假網站,裡面用iframe巢狀一個銀行網站 http://mybank.com
把iframe寬高啥的調整到頁面全部,這樣使用者進來除了域名,別的部分和銀行的網站沒有任何差別。這時如果使用者輸入賬號密碼,我們的主網站可以跨域訪問到http://mybank.com的dom節點,就可以拿到使用者的輸入了,那麼就完成了一次攻擊。
      所以說有了跨域跨域限制之後,我們才能更安全的上網了。