LazyBone's blog

August 7, 2024

Same Origin Policy 基礎知識

Security1.2 min to read

DOM同源政策

protocol,host,**port**組成一份doucument

example:http://google.com/

子域(host)不同,不算同源: https://store.google.com/tw

協定(protocol)不同,不算同源: https://store.google.com/tw/?hl=zh-TW

端口(port)不同,不算同源: http://google.com/

同源標準並非完全限制跨來源存取,以下某些情況允許特例。

特定行為

  1. 跨來源通常可嵌入資源:

    • #載入CSS腳本
    • #載入JS腳本
  2. 跨來源通常可寫入資源:

    • 重定向(redirect)
    • 連結(links)
    • 表單(form)
  3. 跨來源通常禁止讀取資源:

    跨來源請求若從PHP、JSP等等code發送出來,會受到同源政策的限制(Fetch API、XHR)

不難發現雖然HTML tag可進行嵌入操作,但卻對於javascript、php等等語言進行了一個限制,加固了安全。

從主網域進到子網域時,根據同源政策的定義,這兩個網域屬於跨來源,正常來講會被禁止資源存取,但在Cookie這裡,可能出現了例外,子網域可能能修改主網域的Cookie作回傳

Cookie同源政策

Cookie需要將儲存的數據回傳Server

host,**path**只要相同,便被視為同源

特定行為

  1. 不同源的cookie,return回去會回到各自的主機。
  2. 經過設定,子網域與主網域的cookie可以共用。
Set-Cookie: name=value; domain=game.com   //無法共用cookie
Set-Cookie: name=value; domain=.game.com //可以共用cookie

潛在問題

DOM 的同源政策對於嵌入資源沒有防範,可以用來CSRF。

同源政策沒有限制子網域去修改主網域的cookie。

參考資料:[https://medium.com/程式猿吃香蕉/same-origin-policy-同源政策-一切安全的基礎-36432565a226](https://medium.com/%E7%A8%8B%E5%BC%8F%E7%8C%BF%E5%90%83%E9%A6%99%E8%95%89/same-origin-policy-%E5%90%8C%E6%BA%90%E6%94%BF%E7%AD%96-%E4%B8%80%E5%88%87%E5%AE%89%E5%85%A8%E7%9A%84%E5%9F%BA%E7%A4%8E-36432565a226)