cookie的生命週期、訪問限制、做用域、prefixes

cookie的生命週期

cookie的生命週期能夠經過兩種方式定義:html

  • 會話期cookie是最簡單的cookie:瀏覽器關閉後會被自動刪除。會話期cookie不須要指定過時時間(Expires)或者有效期(Max-Age)。須要注意的是,有些瀏覽器提供了會話恢復功能,這種狀況即便關閉了瀏覽器,會話期cookie也會被保留下來,這會致使cookie的生命週期無限期延長
  • 持久性cookie的生命週期取決於過時時間(Expires)或者有效期(Max-Age)指定的一段時間。
    • 當Cookie的過時時間被設定時,設定的日期和時間只與客戶端相關,而不是服務端。

限制訪問Cookie

  • Secure:標記爲Secure的cookie經過被HTTPS協議加密過的請求發送給服務端。能夠預防man-in-the-middle攻擊。
    • 從Chrome52和firefox 52開始,非Https的站點沒法使用Cookie的Secure標記。
  • HttpOnly:JavaScript Document.cookie API沒法訪問帶有HttpOnly屬性的cookie,此類cookie僅做用於服務器。此屬性有助於緩解跨站點腳本(XSS)攻擊。

Cookie的做用域

  • Domain:指定了哪些主機能夠接受cookie。若是不指定,默認爲origin,不包含子域名。若是指定了Domain,通常包含子域名。
    • 當前大多數瀏覽器遵循 RFC 6265,設置 Domain 時 不須要加前導點。瀏覽器不遵循該規範,則須要加前導點,例如:Domain=.mozilla.org
  • Path:指定了主機下的哪些路徑能夠接受cookie。以"/"做爲路徑分隔符,子路徑也會被匹配。
  • SameSite:容許服務器要求某個cookie在跨站請求時不會被髮送,其中Site由可註冊域定義,從而能夠組織跨站請求僞造攻擊(CSRF)。取值以下:
    • None:瀏覽器會在同站請求、跨站請求下繼續發送cookies,不區分大小寫。
    • Strict:瀏覽器只在訪問相同站點時發送cookie。
    • Lax:與Strict相似,但用戶從外部站點導航至URL時(例如經過連接)除外。在新版本瀏覽器中,爲默認選項爲默認選項,Same-site cookies 將會爲一些跨站子請求保留,如圖片加載或者 frames 的調用,但只有當用戶從外部站點導航到URL時纔會發送。如 link 連接。
      • 之前,SameSite若是沒有設置,默認行爲等同於None,cookies會被包含在任何請求中,包括跨站請求。
      • 大多數主流瀏覽器正在將SameSite的默認值遷移到Lax,若是要指定cookie在同站、跨站請求都被髮送,須要明確指定SameSite爲None。
  • __Host-:若是cookie名稱具備此前綴,僅當它也用Secure屬性標記,是從安全源發送的,不包含Domain屬性,並將Path屬性設置爲/時,它纔在Set-Cookieheader中接受。這些cookie能夠被視爲"domain-locked"。
  • __Secure-:若是cookie明白包含此前綴,則僅當它也用Secure屬性標記,是從安全源發送的,它纔在Set-Cookieheader中接受。此前綴限制弱於__Host-前綴。
  • 帶有這些前綴的cookie,若是不符合其限制的會被瀏覽器拒絕。

參考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies瀏覽器

關聯cookie知識點:Cookie的HttpOnly、secure、domain屬性安全

相關文章
相關標籤/搜索