最近在公司研發羣,發現有人反饋內部網站跨域訪問莫明的出現站點重定向問題,而且都是谷歌80 版本以後出現。 javascript
準確的說是78版本以後,而且可能存在同一版本不一樣人的瀏覽器表現不一樣,做者本人也升級了谷歌版本爲最新,沒有發現這個問題。換句話說這TM就是一樁冤案。做爲一個苦逼的研發,冤案不是第一次 見,仍是要解決的。重定向的緣由無非就是沒有cookie,致使沒有登陸態。沿着這個思路咱們展開了一系列的探索。java
結果:失敗,沒有解決問題 git
結果:成功解決,可是,這個方案有點侷限,若是全部人都遇到這個問題,你還須要給每個人都去說一遍,你須要打開chrome://flags/ ,設置SameSite,天,太麻煩了。出口堵住太麻煩了,固然這也是一種臨時方案,因此咱們仍是要像一個簡單點的方案,就是歷來源去解決。 github
網站跨域訪問莫明的出現站點重定向,源頭在哪,就是在統一登陸的地方,若是咱們在統一登陸的地方設置了SameSite,哪是否是就在全部用到當前登陸態的地方就解決了這個問題。怎麼操做了。 操做很簡單,其實就是在報文裏面set-cookie,添加SameSite=None; Secure chrome
結果:完美解決,一勞永逸。不要給全部人解釋你須要怎麼怎麼作了。 api
最後我回過來思考一下爲何會出現這樣的緣由了。你們發如今探索的過程當中,基本都是改變了SameSite的設置,才成功解決的。 Cookie 的SameSite屬性用來限制第三方 Cookie,從而減小安全風險。它能夠設置三個值:跨域
Strict最爲嚴格,徹底禁止第三方 Cookie,跨站點時,任何狀況下都不會發送 Cookie。換言之,只有當前網頁的 URL 與請求目標一致,纔會帶上 Cookie。瀏覽器
Set-Cookie: CookieName=CookieValue; SameSite=Strict;
複製代碼
這個規則過於嚴格,可能形成很是很差的用戶體驗。好比,當前網頁有一個 GitHub 連接,用戶點擊跳轉就不會帶有 GitHub 的 Cookie,跳轉過去老是未登錄狀態。安全
Lax規則稍稍放寬,大多數狀況也是不發送第三方 Cookie,可是導航到目標網址的 Get 請求除外。bash
Set-Cookie: CookieName=CookieValue; SameSite=Lax;
複製代碼
設置了Strict或Lax之後,基本就杜絕了 CSRF 攻擊。固然,前提是用戶瀏覽器支持 SameSite 屬性。
網站能夠選擇顯式關閉SameSite屬性,將其設爲None。不過,前提是必須同時設置Secure屬性(Cookie 只能經過 HTTPS 協議發送),不然無效。
Set-Cookie: widget_session=abc123; SameSite=None; Secure
複製代碼
chrome升級到80版本以後(準確的說是78版本以後),cookie的SameSite屬性默認值由None變爲Lax,這個纔是本次事件的根本緣由。
這個問題在社區也是有討論的,討論地址:github.com/google/goog…