同源策略與跨域的一點了解

2021-09-19 11:19:11 字數 2121 閱讀 3884

協議+網域名稱+埠-----全部一致則說明同源!!!

下表給出了相對同源檢測的示例:

url結果

原因成功

只有路徑不同

成功

只有路徑不同

失敗

不同協議 ( https和http )

失敗

不同埠 ( http:// 80是預設的)

失敗

不同網域名稱 ( news和store )

由同乙個源載入的文件或指令碼禁止訪問另乙個源的資源。 

出於安全原因,瀏覽器限制從指令碼內發起的跨源http請求。

若沒有同源策略,可能會發生這樣的攻擊:

使用者登入了自己的銀行頁面 向使用者的cookie中新增使用者標識。

使用者瀏覽了惡意頁面 執行了頁面中的惡意ajax請求**。

向發起ajax http請求,請求會預設把對應cookie也同時傳送過去。

銀行頁面從傳送的cookie中提取使用者標識,驗證使用者無誤,response中返回請求資料。此時資料就洩露了。

而且由於ajax在後台執行,使用者無法感知這一過程。

同源策略雖然安全,但是不可避免的扔有很多請求需要跨域,這時就需要突破跨域限制

1》jsonp實現跨域

基本原理就是通過動態建立script標籤,然後利用src屬性進行跨域。jsonp只支援get請求

優勢在於支援老式瀏覽器,以及可以向不支援cors的**請求資料。

2》伺服器**

瀏覽器有跨域限制,但是伺服器不存在跨域問題,所以可以由伺服器請求所要域的資源再返回給客戶端。

3》document.domain來跨子域

4》 location.hash跨域

5》 使用postmessage實現頁面之間通訊

6》跨域資源共享cors(cross-origin resource sharing)

cors需要瀏覽器和伺服器同時支援。目前,所有瀏覽器都支援該功能,ie瀏覽器不能低於ie10。

整個cors通訊過程,都是瀏覽器自動完成,不需要使用者參與。瀏覽器一旦發現ajax請求跨源,就會自動新增一些附加的頭資訊,有時還會多出一次附加的請求,但使用者不會有感覺。

因此,實現cors通訊的關鍵是伺服器只要伺服器實現了cors介面,就可以跨源通訊。

cors請求分成兩類:簡單請求(****** request)和非簡單請求(not-so-****** request)。

這裡推薦阮老師的文章:

增加access-control-allow-origin這樣的字段,對於非簡單請求還會有一次預檢請求。

cors請求預設不傳送cookie和http認證資訊。如果要把cookie發到伺服器,一方面要伺服器同意,指定access-control-allow-credentials字段。

access-control-allow-credentials: true
另一方面,開發者必須在ajax請求中開啟withcredentials屬性。

xhr.withcredentials = true;需要注意的是,如果要傳送cookie,access-control-allow-origin就不能設為星號,必須指定明確的、與請求網頁一致的網域名稱。

@component

public class alloworigininterceptor implements handlerinterceptor else

return true;

}}

跨域訪問與同源策略

因為在同乙個瀏覽器視窗中能夠同時開啟多個 的頁面,而且它們都處於同乙個會話中,如果不禁止跨域訪問則會造成使用者隱私資料洩露和登入身份冒用的問題,所以瀏覽器會使用同源策略限制跨域訪問。跨域訪問被禁止有時會給應用開發帶來阻礙,但在符合特定條件時也有相應的方法在保證安全的情況下能夠解決跨域訪問的問題。在對...

一文梳理同源策略與跨域技術

同源策略是乙個重要的安全策略,它用於限制乙個origin的文件或者它載入的指令碼如何能與另乙個源的資源進行互動。它能幫助阻隔惡意文件,減少可能被攻擊的媒介。1.1何謂同源?如果兩個 url 的 protocol port 如果有指定的話 和 host 都相同的話,則這兩個 url 是同源。這個方案也...

同源和跨域的知識點

1.同源的概念 同源 也叫同源策略 是瀏覽器中的一種安全機制 2.同源的規則 同源指 三個相同 協議相同,網域名稱相同,埠號相同 簡單來說,就是同乙個 埠號不同 網域名稱不同 協議不同 3.同源的目的 是為了保護使用者資訊的安全,防止惡意 竊取資訊 4.同源策略的限制範圍 也就是不同源的情況 coo...