跨域 跨域
跨域
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,那麼可以做如下攻擊:
- 使用者登入了自己的銀行頁面 http://mybank.com,http://mybank.com向用戶的cookie中新增使用者標識。
- 使用者瀏覽了惡意頁面 http://evil.com。執行了頁面中的惡意AJAX請求程式碼。
- http://evil.com向http://mybank.com發起AJAX HTTP請求,請求會預設把http://mybank.com對應cookie也同時傳送過去。
- 銀行頁面從傳送的cookie中提取使用者標識,驗證使用者無誤,response中返回請求資料。此時資料就洩露了。
- 而且由於Ajax在後臺執行,使用者無法感知這一過程。
DOM同源策略也一樣,如果iframe之間可以跨域訪問,可以這樣攻擊:
- 做一個假網站,裡面用iframe巢狀一個銀行網站 http://mybank.com。
- 把iframe寬高啥的調整到頁面全部,這樣使用者進來除了域名,別的部分和銀行的網站沒有任何差別。
- 這時如果使用者輸入賬號密碼,我們的主網站可以跨域訪問到
所以說有了跨域跨域限制之後,我們才能更安全的上網了。
跨域的幾種解決方法
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,那麼可以做如下攻擊:
- 使用者登入了自己的銀行頁面 http://mybank.com,http://mybank.com向用戶的cookie中新增使用者標識。
- 使用者瀏覽了惡意頁面 http://evil.com。執行了頁面中的惡意AJAX請求程式碼。
- http://evil.com向http://mybank.com發起AJAX HTTP請求,請求會預設把http://mybank.com對應cookie也同時傳送過去。
- 銀行頁面從傳送的cookie中提取使用者標識,驗證使用者無誤,response中返回請求資料。此時資料就洩露了。
- 而且由於Ajax在後臺執行,使用者無法感知這一過程。
DOM同源策略也一樣,如果iframe之間可以跨域訪問,可以這樣攻擊:
- 做一個假網站,裡面用iframe巢狀一個銀行網站 http://mybank.com。
- 把iframe寬高啥的調整到頁面全部,這樣使用者進來除了域名,別的部分和銀行的網站沒有任何差別。
- 這時如果使用者輸入賬號密碼,我們的主網站可以跨域訪問到http://mybank.com的dom節點,就可以拿到使用者的輸入了,那麼就完成了一次攻擊。
所以說有了跨域跨域限制之後,我們才能更安全的上網了。
跨域的幾種解決方法
1.後臺放開限制 優點:誰都能請求,方便 缺點:不安全
2.JSONP 利用script標籤中的src屬性不受同源策略限制
3.設定document.domain解決無法讀取非同源網頁的 Cookie問題
4.跨文件通訊 API:window.postMessage()
5.CORS
6.webpack本地代理
7.websocket
8.Nginx反向代理