cookie屬性:
1.domain:指定了cookie應該被髮送到哪些域,預設情況下,cookie只會被髮送到設定它的那個域。可以設定更廣泛的域,比如 .example.com,這樣所有子域都可以訪問這個cookie。
這裡我們簡單來了解一下域名和子域名。
子域名
定義:子域名是在域名前面新增的一個字首,用以建立一個獨立但相關的域名。子域名仍然屬於其父域名,並且共享相同的頂級域。
結構:子域名位於主域名之前,兩者之間用點號( . )分隔。例如,在blog.example.com中:
-
-
- blog是子域名。
- example是主域名
- .com是頂級域
-
比如掘金裡面的這個介面
它設定的是 .juejin.cn的主域,這樣上面的api.juejin.cn介面,也可以訪問這個cookie。
2.path:指定了cookie應該被髮送到哪些路徑,預設情況下,cookie會被髮送到設定它的那個路徑及其子路徑
例如阿里通義千問的下面這條cookie。如下
只會在包含/growth的http請求裡面攜帶如下。
3.Secure:指示瀏覽器只透過HTTPS協議傳送cookie,以提高安全性。
4.SameSite:控制cookie在跨站請求時的行為,可用來防範CSRF攻擊。
它由三個值
- Strict
- Lax
- None
4.1 Strict
Strict最為嚴格,完全禁止第三方cookie,跨站點時,任何情況下都不會傳送Cookie。換言之,只有當前網頁的URL與請求目標一致,才會帶上Cookie。
Set-Cookie: CookieName=CookieValue; SameSite=Strict;
這個規則非常嚴格,可能造成非常不好的使用者體驗。比如,當前網頁有一個Github連結,使用者點選跳轉就不會帶有GitHub的Cookie,跳轉過去總是未登入狀態
4.2 Lax
Lax規則要放寬一些,大多數情況下也是不傳送第三方cookie,但是導航到目標網址的Get請求除外。
導航到目標網址的GET請求,只包括三種情況:連結、預載入請求,GET表單。詳情請看Cookie 的 SameSite 屬性 - 阮一峰的網路日誌 (ruanyifeng.com)
4.3 None
網站可以選擇顯示關閉SameSite屬性,將其設定為None,這個時候允許所有型別的跨站請求攜帶cookie。不過,前提是必須同時設定Secure屬性(Cookie只能透過HTTPS協議傳送),否則無效。
其實還有一種是為空,沒有設定SameSite屬性的情況。
插播一條小知識點: 由第三方網站引導發出的cookie,就稱為第三方cookie。它除了用於CSRF攻擊,還可以用於使用者追蹤,關於CSRF的詳細解釋XSS攻擊和CSRF攻擊 - 飛向火星 - 部落格園 (cnblogs.com)