Chrome 中 Set-Cookie SameSite 問題

關(guān)于 “Chrome 修改對未設(shè)置 SameSite 的 cookie,視作 SameSite:Lax 處理的變更” 的問題,目前看,最妥善的解決方案還是按照規(guī)矩辦事兒,目前 Chrome 是行動最快的,而 FireFox 和 Edge 也在積極跟進(jìn),持支持態(tài)度。


影響范圍:

如果你的項(xiàng)目中有如下跨域場景:

  1. 跨域的 ajax 請求;
  2. 跨域嵌入的 iframe;
  3. 跨域的圖片資源請求;
  4. 跨域的 POST FORM 表單;

如果存在這類跨域場景,且在服務(wù)端接收請求的時(shí)候,需要使用流量中的 cookie,則需要注意:這個(gè) cookie 在設(shè)置的時(shí)候,是否明確有: SameSite:None; Secure 這兩個(gè)屬性。如果沒有的話,就會受到此策略影響。

例子:

a.com 的頁面中,加載 b.com 的 iframe,且希望 iframe 請求的流量中,攜帶 b.com 的 cookie,用其中的 login_token 作為登錄憑證。

+------------------+               +-----------------+
|      a.com       |               |      b.com      |
|  +------------+  |  cookie:      |                 |
|  |            |  |  login_token  |                 |
|  |  <iframe>  +----------x----------->             |
|  |            |  |               |                 |
|  +------------+  |               |                 |
+------------------+               +-----------------+

              +----------------------------------------------------------+
              |  Set-Cookie: login_token=x.xxxxxx; path=/; domain=b.com  |
              +----------------------------------------------------------+


如果此 token 的 cookie 在設(shè)置的時(shí)候,未指明 SameSite:None; Secure 這兩個(gè)屬性,如:

set-cookie: login_token=x.xxxxxx; path=/; domain=b.com

則實(shí)際請求中,不會攜帶 login_token 這條 cookie,因此,iframe 實(shí)際處于未登錄狀態(tài)。

其他場景,如 Ajax,與此同理。


變更:

在舊策略中,當(dāng) set-cookie 時(shí)不顯式聲明 SameSite 時(shí)(或只聲明 SameSite,未使用 Secure 時(shí)),瀏覽器會自動視為 SameSite:None,即不限制 cookie。此時(shí)上面場景中的 cookie 是可以正常發(fā)送的。

在新策略中,如上場景,會視為 SameSite:Lax,即只有在特定情況下,才會攜帶 cookie。上面場景中的 iframe 的請求中,不會攜帶 cookie。


解決

最正當(dāng)?shù)慕鉀Q方法,就是在對需要跨域發(fā)送的 cookie 進(jìn)行 set-cookie 的時(shí)候,顯式聲明 SameSite:None; Secure 屬性,如:

set-cookie: ck01=vl01; Path=/; Secure; SameSite=None

通過此種方法,允許 cookie 隨跨域流量發(fā)送。

否則,只能通過調(diào)整域、以及攜帶參數(shù)的方式解決。

臨時(shí)的解決方案,可以暫時(shí)讓出現(xiàn)問題的瀏覽器,通過設(shè)置解決,方式如下:

  1. 在 chrome 地址欄輸入 chrome://flags
1.png
  1. 在配置項(xiàng)中,搜索 samesite
2.png
  1. 將以下幾項(xiàng),設(shè)置為 disabled
3.png
  1. 重啟瀏覽器

相關(guān)資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容