1. 程式人生 > 其它 >跨域 跨域

跨域 跨域

跨域

 

1.什麼是跨域?

跨域,指的是瀏覽器不能執行其他網站的指令碼。它是由瀏覽器的同源策略造成的,是瀏覽器施加的安全限制。

所謂同源是指,域名,協議,埠均相同,只要有一個不同,就是跨域。

 例如:

 還需要講的一個東西叫做同源策略:

同源策略/SOP(Same origin policy)是一種約定,由 Netscape 公司 1995 年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,現在所有支援 JavaScript 的瀏覽器都會使用這個策略。如果缺少了同源策略,瀏覽器很容易受到 XSS、 CSFR 等攻擊。

同源是指"協議+域名+埠"三者相同,即便兩個不同的域名指向同一個 ip 地址,也非同源。

源就是協議、域名和埠號。

協議:http,https

域名:區域的名字,每個域名都對應一個IP地址, 舉個例子:域名:www.baidu.com,http://180.101.49.12/

180.101.49.12則為IP地址

為什麼要去限制跨域呢?

AJAX同源策略主要用來防止CSRF攻擊。如果沒有AJAX同源策略,相當危險,我們發起的每一次HTTP請求都會帶上請求地址對應的cookie,那麼可以做如下攻擊:

  1. 使用者登入了自己的銀行頁面 向用戶的cookie中新增使用者標識。
  2. 使用者瀏覽了惡意頁面 。執行了頁面中的惡意AJAX請求程式碼。
  3. 發起AJAX HTTP請求,請求會預設把對應cookie也同時傳送過去。
  4. 銀行頁面從傳送的cookie中提取使用者標識,驗證使用者無誤,response中返回請求資料。此時資料就洩露了。
  5. 而且由於Ajax在後臺執行,使用者無法感知這一過程。

DOM同源策略也一樣,如果iframe之間可以跨域訪問,可以這樣攻擊:

  1. 做一個假網站,裡面用iframe巢狀一個銀行網站 
  2. 把iframe寬高啥的調整到頁面全部,這樣使用者進來除了域名,別的部分和銀行的網站沒有任何差別。
  3. 這時如果使用者輸入賬號密碼,我們的主網站可以跨域訪問到
    的dom節點,就可以拿到使用者的輸入了,那麼就完成了一次攻擊。

所以說有了跨域跨域限制之後,我們才能更安全的上網了。

跨域的幾種解決方法

1.後臺放開限制        優點:誰都能請求,方便        缺點:不安全

2.JSONP   利用script標籤中的src屬性不受同源策略限制

3.設定document.domain解決無法讀取非同源網頁的 Cookie問題

4.跨文件通訊 API:window.postMessage()

5.CORS

6.webpack本地代理

 7.websocket

8.Nginx反向代理

1.什麼是跨域?

跨域,指的是瀏覽器不能執行其他網站的指令碼。它是由瀏覽器的同源策略造成的,是瀏覽器施加的安全限制。

所謂同源是指,域名,協議,埠均相同,只要有一個不同,就是跨域。

 例如:

 還需要講的一個東西叫做同源策略:

同源策略/SOP(Same origin policy)是一種約定,由 Netscape 公司 1995 年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,現在所有支援 JavaScript 的瀏覽器都會使用這個策略。如果缺少了同源策略,瀏覽器很容易受到 XSS、 CSFR 等攻擊。

同源是指"協議+域名+埠"三者相同,即便兩個不同的域名指向同一個 ip 地址,也非同源。

源就是協議、域名和埠號。

協議:http,https

域名:區域的名字,每個域名都對應一個IP地址, 舉個例子:域名:www.baidu.com,http://180.101.49.12/

180.101.49.12則為IP地址

為什麼要去限制跨域呢?

AJAX同源策略主要用來防止CSRF攻擊。如果沒有AJAX同源策略,相當危險,我們發起的每一次HTTP請求都會帶上請求地址對應的cookie,那麼可以做如下攻擊:

  1. 使用者登入了自己的銀行頁面 向用戶的cookie中新增使用者標識。
  2. 使用者瀏覽了惡意頁面 。執行了頁面中的惡意AJAX請求程式碼。
  3. 發起AJAX HTTP請求,請求會預設把對應cookie也同時傳送過去。
  4. 銀行頁面從傳送的cookie中提取使用者標識,驗證使用者無誤,response中返回請求資料。此時資料就洩露了。
  5. 而且由於Ajax在後臺執行,使用者無法感知這一過程。

DOM同源策略也一樣,如果iframe之間可以跨域訪問,可以這樣攻擊:

  1. 做一個假網站,裡面用iframe巢狀一個銀行網站 
  2. 把iframe寬高啥的調整到頁面全部,這樣使用者進來除了域名,別的部分和銀行的網站沒有任何差別。
  3. 這時如果使用者輸入賬號密碼,我們的主網站可以跨域訪問到的dom節點,就可以拿到使用者的輸入了,那麼就完成了一次攻擊。

所以說有了跨域跨域限制之後,我們才能更安全的上網了。

跨域的幾種解決方法

1.後臺放開限制        優點:誰都能請求,方便        缺點:不安全

2.JSONP   利用script標籤中的src屬性不受同源策略限制

3.設定document.domain解決無法讀取非同源網頁的 Cookie問題

4.跨文件通訊 API:window.postMessage()

5.CORS

6.webpack本地代理

 7.websocket

8.Nginx反向代理