.Net Core3.1中SameSite的使用方法、遇到的問題以及解決辦法

1、關於SameSite的介紹瀏覽器

1.  什麼是SameSite?服務器

SameSite是瀏覽器請求中Set-Cookie響應頭新增的一種屬性,它用來標明這個 cookie 是不是「同站 cookie」,同站 cookie 只能在本域名中使用的cookie,不能做爲第三方 cookie。cookie

Chrome 51 開始,瀏覽器的 Cookie 新增長了一個SameSite屬性,用來防止 CSRF 攻擊和用戶追蹤。該屬性起初是由Google 起草的一份草案用來來改進 HTTP 協議的。

網絡

2. 爲何要用SameSite?session

用來防止 CSRF 攻擊和用戶追蹤。Cookie 每每用來存儲用戶的身份信息,惡意網站能夠設法僞造帶有正確 Cookie 的 HTTP 請求,這就是 CSRF 攻擊。網站

 

3. 在.Net Core3.1中如何使用SameSite?spa

    用戶想要在.Net Core3.1中使用該屬性(以SameSite=None爲例),則應在Startup.cs中配置如下代碼:3d

services.Configure<CookiePolicyOptions>(options =>
{
       options.MinimumSameSitePolicy = SameSiteMode.None; });

 

2、使用SameSite時的具體使用code

在.Net Core3.1中使用SameSite屬性應注意如下幾點:blog

    (1)Strict 最爲嚴格,徹底禁止第三方 Cookie,跨站點時,任何狀況下都不會發送 Cookie。換言之,只有當前網頁的 URL 與請求目標一致,纔會帶上 Cookie

    (2) Lax規則稍稍放寬,大多數狀況也是不發送第三方 Cookie,可是導航到目標網址的 Get 請求除外

    (3)Chrome 計劃將Lax變爲默認設置。這時,網站能夠選擇顯式關閉SameSite屬性,將其設爲None (對舊版瀏覽器無效,由於舊版瀏覽器沒有該值。不過,前提是必須同時設置Secure屬性(Cookie 只能經過 HTTPS 協議發送),不然無效。

 下面的設置無效

Set-Cookie: widget_session=abc123; SameSite=None
//瀏覽器警告提示

   下面的設置有效

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

 (4)Unspecified表示不指定SameSite屬性。這意味着,瀏覽器不會將 SameSite 屬性添加到Set-Cookie中而且客戶端將使用其默認行爲 (對舊版瀏覽器無效,由於舊版瀏覽器沒有該值) 。

    (5)設置Secure屬性,該屬性在SameSite=None的場景下使用(以SameAsRequest爲例)

services.Configure<CookiePolicyOptions>(options =>
{
                options.MinimumSameSitePolicy = SameSiteMode.Unspecified; options.Secure = CookieSecurePolicy.SameAsRequest; });

              該屬性配置的枚舉值有如下幾個:

    SameAsRequest:若是提供 cookie 的 URI 是 HTTPS,則 cookie 僅會在後續的 HTTPS 請求上返回到服務器。 不然,若是提供 cookie 的 URI 爲 HTTP,則 cookie 將在全部 HTTP 和 HTTPS 請求上返回到服務器。 此值可確保已部署服務器上的全部通過身份驗證的請求使用 HTTPS,還支持將 HTTP 用於本地主機開發和不支持 HTTPS 的服務器。

    Always:Secure 始終標記爲 true。 當登陸頁以及須要身份驗證標識的全部後續頁是 HTTPS 時,請使用此值。 本地開發也須要使用 HTTPS URL 來完成。

    None:Secure 未標記爲 true。 當登陸頁爲 HTTPS,但站點上的其餘 HTTP 頁也須要身份驗證信息時,請使用此值。 不建議使用此設置,由於本地網絡或無線鏈接中的其餘計算機可能會觀察到並使用隨 HTTP 請求提供的身份驗證信息。

 

3、遇到的問題

 

 按照SameSite=None的解釋,一是這表示容許Cookie的使用,二是必須配合Secure的設置。

那麼當配置Secure的時候,按照文檔的解釋,配置爲CookieSecurePolicy.SameAsRequest時,不管是https仍是http的場景下,用戶登陸應該都是沒有問題的(由於用戶登陸信息存在cookie中了)

但實際上以上個人配置並不生效,瀏覽器老是提示

 

 說明沒有標記secure成功(此時瀏覽器用不了cookie,系統老是會跳到登陸頁面)!

我也查了一下資料,說是這種狀況Cookie 只能經過 HTTPS 協議發送,我也確實是證明了在https下是能夠正常登陸的。

具體是什麼緣由,我也不知道,也可能就是規定這麼用,這裏有待大神指點!!!

 

4、解決辦法

1. 把SameSite設置爲了Unspecified,此時瀏覽器不存在SameSite屬性,就不會出現cookie的任何問題。

2. 把域名搞成https,而後SameSite=None配合Secure=SameAsRequest使用,也能夠正常使用cookie

 

本人小白,大神勿噴!

相關文章
相關標籤/搜索