關(guān)于 “Chrome 修改對(duì)未設(shè)置 SameSite 的 cookie养筒,視作 SameSite:Lax 處理的變更” 的問題郑叠,目前看裆装,最妥善的解決方案還是按照規(guī)矩辦事兒,目前 Chrome 是行動(dòng)最快的潦闲,而 FireFox 和 Edge 也在積極跟進(jìn)攒菠,持支持態(tài)度。
影響范圍:
如果你的項(xiàng)目中有如下跨域場(chǎng)景:
- 跨域的 ajax 請(qǐng)求歉闰;
- 跨域嵌入的 iframe辖众;
- 跨域的圖片資源請(qǐng)求卓起;
- 跨域的 POST FORM 表單;
如果存在這類跨域場(chǎng)景赵辕,且在服務(wù)端接收請(qǐng)求的時(shí)候,需要使用流量中的 cookie概龄,則需要注意:這個(gè) cookie 在設(shè)置的時(shí)候还惠,是否明確有: SameSite:None; Secure
這兩個(gè)屬性。如果沒有的話私杜,就會(huì)受到此策略影響蚕键。
例子:
在 a.com
的頁面中,加載 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
通過此種方法赘淮,允許 cookie 隨跨域流量發(fā)送。
否則睦霎,只能通過調(diào)整域梢卸、以及攜帶參數(shù)的方式解決。
臨時(shí)的解決方案副女,可以暫時(shí)讓出現(xiàn)問題的瀏覽器蛤高,通過設(shè)置解決,方式如下:
- 在 chrome 地址欄輸入
chrome://flags
- 在配置項(xiàng)中碑幅,搜索
samesite
- 將以下幾項(xiàng)戴陡,設(shè)置為
disabled
- 重啟瀏覽器
相關(guān)資料
SameSite 屬性介紹:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies#SameSite_Cookies關(guān)于 SameSite 機(jī)制的介紹:
https://web.dev/samesite-cookies-explained/
https://web.dev/samesite-cookie-recipes/chrome 關(guān)于更換 SameSite 策略的文章:
https://blog.chromium.org/2019/10/developers-get-ready-for-new.html測(cè)試 SameSite 特性的網(wǎng)站:
https://samesite-sandbox.glitch.me/