Chrome 中 Set-Cookie SameSite 問(wèn)題

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


影響范圍:

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

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

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

例子:

a.com 的頁(yè)面中,加載 b.com 的 iframe,且希望 iframe 請(qǐng)求的流量中,攜帶 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í)際請(qǐng)求中,不會(huì)攜帶 login_token 這條 cookie,因此,iframe 實(shí)際處于未登錄狀態(tài)。

其他場(chǎng)景,如 Ajax,與此同理。


變更:

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

在新策略中,如上場(chǎng)景,會(huì)視為 SameSite:Lax,即只有在特定情況下,才會(huì)攜帶 cookie。上面場(chǎng)景中的 iframe 的請(qǐng)求中,不會(huì)攜帶 cookie。


解決

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

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

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

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

臨時(shí)的解決方案,可以暫時(shí)讓出現(xiàn)問(wèn)題的瀏覽器,通過(guò)設(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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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