同源政策(Same-origin Policy)與跨來源資源請求(CORS)

莊創偉
Aug 17, 2021

--

詳細說明請看 MSDN

這裡簡單筆記一下以免之後忘記。

同源政策跨來源資源請求皆是由瀏覽器發起,因此各家瀏覽器或多或少有些差異。
如 Chorme 8.0 後的同源預設是 Lax,Safari 預設則是Strict 而且不接受 None,IE則是不檢查Port是否相同。
總之各家各有各家的規則而且隨時可能因為更新而調整。

同源政策與跨來源資源請求都是提升使用者的安全而非提升網站安全性。

同源政策最初主要是防止 Cookie外洩,即 A網站的 Cookie 不能讓 B網站讀寫,這主要防止了 CRSF 攻擊 ,隨著網路發展限制種類也隨著增加,如取得DOM、Ajax請求等。

但同源政策帶來了諸多限制與開發上的困擾,網上也有許多繞過同源政策的解法,如:Jsonp、用 Html tag發出請求、透過 proxy 取得等。

於是 W3C 訂了新的規範 CORS 讓網站或服務自行宣告是否允許第三方要求資源。

要注意的是即使違反CORS 設定,如果請求已經發出(瀏覽器未觸發預檢設定),API 或網頁依然會正常回應,只是返回結果會被瀏覽器擋下而已。因為判斷是否符合CORS的是瀏覽器而非伺服器。

設了CORS並不會增加站台的安全性,因為這個東西是給瀏覽器用來保護使用者安全的與網站本身的安全性無關。

而即便設定了同源政策與CORS並不代表能擺脫CRSF攻擊,畢竟有很多繞過的方式,且將安全性完全依賴於瀏覽器並不是太好的方法。

--

--

莊創偉

學海無涯。但是為了生計還是得下海的風塵男子