2023年7月18日 星期二

why so design the same origin policy and cors?

為了確保網頁不去攻擊別人,瀏覽器一般會實作同源政策(Same Origin Policy, SOP),限定網頁內嵌讀取,或腳本連線存取的對象,必須是相同網站的其他資源,例如圖片,影音,API服務等。

但是很多情況,網頁須要跨域存取資源,遂有伺服端提供跨源資源分享(Cross-Origin Resource Sharing, CORS)的設計。其原理是瀏覽器向伺服器提出請出時,送出來源(Origin)標頭,由伺服器依據組態,回應存取控制允許來源(Access-Control-Allow-Origin) 標頭,供瀏覽器決定是否存取資源。若請求無來源標頭,或來源不在組態設定的來源清單中,則不回應存取控制允許來源標頭

這種跨源分享的防弊設計建立在瀏覽器及伺服器雙方合作的基礎之上。瀏覽器須能自我克制,參考伺服器意見,才決定是否取用資源。因為如果使用wget或curl等客戶端命令列工具,其實也可忽視伺服器意見,直接取用資源。

又CORS機制的設計為何不是網頁宣告我可以取用誰,而是設計成網頁宣告誰可以取用我。其理由在若採取前者,網頁宣告我可以取用誰,則駭客只要攻入一個網站,就可以輕易偽造此宣告,達成跨域存取任意資源的後果。而現實採取後者,網頁宣告誰可以取用我,其理由在駭客須一一攻入資源提供方,顯然不符成本。

因此CORS機制,採用由伺服器回應瀏覽器,你是否在我的來源許可清單中的無老虎牙設計,顯然其防弊精神不在避免伺服器受攻擊,而是在瀏覽器主動SOP配合下,避免網頁成為攻擊工具,又能合理取用受控資源。

Reference: 1.Medium: 簡單弄懂同源政策 (Same Origin Policy) 與跨網域 (CORS)

沒有留言: