同源策略:瀏覽器基本的安全功能

所謂同源策略,指的是瀏覽器對不同源的腳本或者文本的訪問方式進行的限制,也可以說Web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現。

同源策略是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響,比如源a的js不能讀取或設置引入的源b的元素屬性。那麼先定義下什麼是同源,所謂同源,就是指兩個頁面具有相同的協議,主機(也常說域名),端口,三個要素缺一不可。

同源策略限制從一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用於隔離潛在惡意文件的關鍵的安全機制。瀏覽器的同源策略,出於防範跨站腳本的攻擊,禁止客戶端腳本(如 Java)對不同域的服務進行跨站調用(通常指使用請求)。

同源策略:瀏覽器基本的安全功能

跨域請求方式

解決跨域問題,最簡單的莫過於通過nginx反向代理進行實現,但是其需要在運維層面修改,且有可能請求的資源並不再我們控制範圍內(第三方),所以該方式不能作為通用的解決方案,下面介紹幾種常用的跨域方式:

1.JSONP

AJAX請求受同源策略的影響,不允許進行跨域請求,而標籤的src屬性中的連接卻可以訪問跨域的JS腳本,利用這個特性,服務器端不再返回JSON格式的數據,而是返回一段調用某個函數的JS代碼,在src中進行了調用,這樣子就實現了跨域。JSONP只能發送get請求,且需要服務器端配合。

例如:< class="lazy" src="//p2.ttnews.xyz/loading.gif" data-original="http://192.168.2.11/jsonp.test.php?callback=funcName">

其中,callback=funcName是我們傳給服務器的,服務器將我們需要的JSON數據作為參數傳給這個函數,然後返回這個函數調用的JS文件。而這個funcName函數,需要我們在當前的文檔中已經聲明。

2.通過修改document.domain來跨子域

兩個網頁一級域名相同,只是二級域名不同,瀏覽器允許通過設置document.domain共享cookie或者處理iframe。這種方法只適用於cookie和iframe窗口。cookie同源策略只關注域名,忽略協議和端口號。

3.使用片段標識符來進行跨域

父窗口可以把信息寫入子窗口的片段標識符,子窗口通過監聽hashchange事件得到通知。子窗口也可以改變父窗口的片段標識符。

4.使用window.name來進行跨域

window對象有一個name屬性,在一個窗口的聲明週期內,窗口載入的所有頁面都是共享一個window.name的,每個頁面對window.name都有讀寫的權限。這個屬性的最大特點就是,無論是否同源,只要在一個窗口裡,前一個網頁設置了這個屬性,後一個網頁就可以讀取它。

5.window.postMessage

window.postMessage是一個跨文檔通信API,允許跨窗口通信,不論這兩個窗口是否同源。

父窗口向子窗口發消息調用postMessage(“data”,URL);

子窗口設置監聽message事件:window.onmessage=function(e){};

子窗口向父窗口發送消息:window.opener.postMessage(“data”,URL);

6.通過webSocket進行跨域

webSocket協議不受同源策略限制,只要服務器支持就可以通過它進行跨域通信。

7.通過設置代理的方法跨域

通過在同域名下的web服務器端創建一個代理,將瀏覽器的請求先發送給同域名下的服務器,由這個服務器去跨域請求其他不同域的服務器數據,然後在將數據傳送回給前端。這裡,同源限制只對客戶端瀏覽器存在,對服務器端不存在同源限制。

8.CORS 跨域資源分享

CORS允許任何類型的請求,CORS需要瀏覽器和服務器同時支持,它允許瀏覽器向跨域服務器發出請求,從而克服了AJAX只能同源使用的限制。整個CORS通信的過程,都是瀏覽器自動完成的,不需要用戶參與。瀏覽器一旦發現AJAX請求跨域,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求。

Origin字段:說明本次請求來自哪個源,服務器可以根據這個值決定是否同意這次請求;

服務器通過Acess-Control-Allow-Origin來設置允許響應來自哪些源的請求。

————————————————————————

SSL證書是HTTP明文協議升級HTTPS加密協議的重要渠道,是網絡安全傳輸的加密通道。關於更多SSL證書的資訊,請關注數安時代(GDCA)。GDCA致力於網絡信息安全,已通過WebTrust 的國際認證,是全球可信任的證書籤發機構。GDCA專業技術團隊將根據用戶具體情況為其提供最優的產品選擇建議,並針對不同的應用或服務器要求提供專業對應的HTTPS解決方案。


分享到:


相關文章: