什麼!? SameSite Cookies Policy 更新了— Chrome SameSite Attribute 簡介

Tommy
Tommy
Jan 11 · 7 min read

簡介

相信大家都對Cookies 這個概念不陌生,就算你沒有編程的經驗,在瀏覽不同網站時,總會彈出一兩個訊息,要求用戶同意網站存取用家的Cookies,用以"優化"用家的體驗和幫助網站分析訪客人數。

而在最近這幾個月,Cookies Policy 有了一個重要的更新:

為了提升網絡安全,Google 提

將SameSite Attibute 的default value 由 "None"轉變為"Lax",亦會要求SameSite Attribute ="None"的 Cookie 必須加入 Secure Flag,加強資料的保護。更新的詳情可在這個連結中看到。

這個更新將會影響數以萬計(甚至億計?)網站的Cookies Policy。如果你沒有看懂以上的更新,不要緊。下文將會簡單介紹Cookies 的結構,並解釋SameSite Attribute 的作用和Secure Flag 的用途。

什麼!? SameSite Cookies Policy 更新了- Chrome SameSite Attribute 簡介
什麼!? SameSite Cookies Policy 更新了- Chrome SameSite Attribute 簡介
什麼!? SameSite Cookies Policy 更新了 — Chrome SameSite Attribute 簡介

Cookies 起源和結構

我們平常瀏覽網站都是通過HTTP 協定來進行的。例如想看Medium 的文章,就在瀏覽器中輸入: http://www.medium.

但HTTP 協定本身是無狀態的(Stateless protocol),亦即是說伺服器不會知道用戶上一次是做了什麼。

例如在一個購物網站中,顧客購買了一個蘋果和兩瓶水,在結帳的頁面時,如果網站不使用"額外的手段",伺服器是不知道用戶到底買了什麼,嚴重影響頁面的實現。

因此,Cookies 就是為了辨別用戶身份和儲存部份的客戶資料而發明。Cookies 是載有小量資料的檔案,自動儲存於互聯網瀏覽器中,可供網站日後檢索。

而Cookies 組成分為三大部份 (如下圖):

  1. 名稱 (Name)
  2. 數據 (Value)
  3. 屬性 (Attributes) — 可以沒有、只有一個或有多個屬性
Cookies 結構簡介

SameSite 屬性 (SameSite Attribute)

SameSite 是其中一個Cookies 的屬性,亦都是今次改動的範圍之一。簡單來說:

SameSite 用來阻止瀏覽器將 Cookies 跨網站發送(prevents the browser from sending this cookie along with cross-site requests)。

主要目標是用以減少跨網站信息洩漏的風險,並針對跨網站偽造要求的攻擊(cross-site request forgery attacks)作保護。 SameSite 設有三個數值 — 1)Strict, 2) Lax 和 3) None。

Strict

Strict 的要求最為嚴格,完全禁止第三方 Cookies,只有當前網頁的 URL 與請求目標一致,才會送出Cookie。

Set-Cookie: CookieName=CookieValue; SameSite=Strict;

例如在下圖中,widget.example 在瀏覽器中了建立了一個Cookie 並將 SameSite 設定為"Strict"。由於目前用家瀏覽的URL 為site.example 與Cookie 的URL 不同,Cookie 並不會向site.example 送出。

Strict Attribute Example (Reference: Rowan Merewood)

這個規則非常嚴格,適合用於銀行需要交易的網站中,保障客戶資料的安全。

Lax

Lax 的要求則較為寬鬆,大多數情況也是不發送Cookie 到第三方 ,但是 Get 請求除外。

Set-Cookie: CookieName=CookieValue; SameSite=Lax;

繼續上圖的例子,如果site.example 將Cookie 的SameSite 設定為"Lax",remote.example (第三方) 提出Get 的指令。與"Strict" 不同,Cookie 將會向remote.example 發送。

Lax Attribute Example (Reference: Rowan Merewood)

這是一個平衡網絡安全和用家體驗的做法。由於Cookies 可以跨網站發送,用家並不需要多次重新登入就可以瀏覽不同網頁。而風險較高的要求,例如POST,在Lax 的設定下將會被禁止,阻止cross-site request forgery attacks 進行。

None

顧名思義,這將容許所有網站對Cookie 的存取,並與Secure Attribute 息息相關,將會在下文詳細介紹。


Secure 屬性 (Secure Attribute)

Secure Attribute 用以限制Cookie 傳輸的方式。如果Secure Attribute 設置為True 時,Cookie只能以"安全"的形式向伺服器傳輸,例如是HTTPS 的方式,並在過程中進行加密使Cookie 的內容不會被容易竊取。

而在這次的Cookie Policy 改動中,如果SameSite 設置為None,Cookie 的Secure Attribute 必須為True,增加資料的保密程度。換句話說:

下面的設置為無效:

Set-Cookie: widget_session=abc123; SameSite=None

下面的設置有效:

Set-Cookie: widget_session=abc123; SameSite=None; Secure

IT+Digital@互聯網

數位化(Digitalization)轉型是推動產業升級所關注的核心議題。 此專題主要收錄與IT 、Digital和Banking 相關的文章,歡迎有興趣人士一同加入!

    Tommy

    Written by

    Tommy

    香港人|| 數碼銀行+ IT行業工作者

    IT+Digital@互聯網

    數位化(Digitalization)轉型是推動產業升級所關注的核心議題。 此專題主要收錄與IT 、Digital和Banking 相關的文章,歡迎有興趣人士一同加入!

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade