一些cookie的知識點

飞向火星發表於2024-09-28

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)

相關文章