Chrome升級到80版本遇到的問題-系統登錄不了的解決方法

背景

隨着疫情的減弱,2020年3月份公司開始復工,復工的第n天我打開Chrome瀏覽器發現可以升級到80版本了,於是升級,看着關於Chrome前面那個對勾真的開心。
在這裏插入圖片描述
完了後開始一天的日常任務,打開vscode,啓動項目,然後登錄系統,WTF,爲什麼登錄後又跳到登錄頁了???控制檯也多了下面這個警告。
在這裏插入圖片描述

找到問題

換了Firefox、360極速都是可以正常登錄的,所以這個情況只在Chrome瀏覽器中有問題。然後看控制檯報的警告,發現是SameSite這個屬性造成的。經過百度80版本更新日誌和查找一些博客發現80版本SameSite這個屬性默認值由None變爲Lax了。

Cookie 的SameSite屬性用來限制第三方 Cookie,防止CRSF(跨站請求攻擊)攻擊,從而減少安全風險。
SameSite可以設置以下三個值:

  1. Strict
    Strict最爲嚴格,完全禁止第三方 Cookie,跨站點時,任何情況下都不會發送 Cookie。換言之,只有當前網頁的 URL 與請求目標一致,纔會帶上 Cookie。
Set-Cookie: CookieName=CookieValue; SameSite=Strict;
  1. Lax
    Lax規則稍稍放寬,大多數情況也是不發送第三方 Cookie,但是導航到目標網址的 Get 請求除外。
Set-Cookie: CookieName=CookieValue; SameSite=Lax;
  1. None
    接受第三方Cookie
Set-Cookie: widget_session=abc123; SameSite=None

由於我項目在本地,連接的是線上的服務器,請求地址不同,後臺接口響應頭Set-Cookie中也沒設置SameSite這個屬性,所以用的默認值,80版本以前是SameSite=“None”,可以接收到線上地址的Cookie,所以就可以登錄成功。但是80版本後變爲了SameSite=“Lax”,獲取不到線上地址的Cookie,所以登錄後後臺服務器沒接收到Cookie,就重新跳轉到登錄頁。

解決方法

方法一:找後臺小姐姐幫忙
找後臺在接口響應頭中的Set-Cookie中加SameSite=None; Secure

80版本後,網站可以選擇顯式關閉SameSite屬性,將其設爲None。不過,前提是必須同時設置Secure屬性(Cookie 只能通過 HTTPS 協議發送),否則無效。感覺Chrome強迫你支持HTTPS啊。

下面的設置無效。

Set-Cookie: widget_session=abc123; SameSite=None

下面的設置有效。

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

方法二:修改瀏覽器配置
這個方法只適用於測試環境。線上環境的話就不行了,你不可能強迫別人瀏覽器都改配置吧。

chrome://flags/#same-site-by-default-cookies

Treat cookies that don’t specify a SameSite attribute as if they were SameSite=Lax. Sites must specify SameSite=None in order to enable third-party usage.

SameSite by default cookies這個配置主要是說如果不設置SameSite就默認SameSite=“Lax”,站點必須指定SameSite=None以啓用第三方使用。

chrome://flags/#cookies-without-same-site-must-be-secure

If enabled, cookies without SameSite restrictions must also be Secure. If a cookie without SameSite restrictions is set without the Secure attribute, it will be rejected. This flag only has an effect if “SameSite by default cookies” is also enabled.

Cookies without SameSite must be secure這個配置是說如果啓用,沒有SameSite限制的Cookie也必須是安全的。如果設置了SameSite=“None”,但是沒有設置Secure,它將被拒絕。此配置只有在“SameSite by default cookies”配置開啓的情況下才有效。

所以只需要將SameSite by default cookies設置爲Disabled就好了。

方法三:回退到80版本前或者換個瀏覽器(不推薦)
如果你不習慣換個瀏覽器的話就重新安裝個80版本之前的。如果你習慣換個瀏覽器,那也只能解決一時之需,後面其他瀏覽器應該也會更新這個功能。這個方法也只適用於測試環境。

參考

Cookie 的 SameSite 屬性
SameSite Cookie介紹
Chrome 80發佈更新內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章