iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
Security

從0基礎開始起飛,一起一步步踏入資安系列 第 27

[ Day27 ] 更多關於cookie的介紹 !

  • 分享至 

  • xImage
  •  

Cookie 屬性

以下為常見的的 cookie 屬性。

Path

  • 作用:限制哪個「路徑」下的請求會帶上該 cookie。
  • 舉例:
    • Set-Cookie: session=abc; Path=/ → 此 cookie 對整個網站(所有路徑)都有效。
    • Set-Cookie: admin=1; Path=/admin → 只有當請求的 URL path 以 /admin 開頭時,瀏覽器才會送這個 cookie。
  • 實務:用來把 cookie scope 縮小到特定子功能(例如 admin 區),降低誤用或被其他路徑利用的風險。

Domain

  • 作用:控制哪些網域/子網域可以存取(或瀏覽器會送出)這個 cookie。
  • 語法與行為:
    • 默認(不寫 Domain):cookie 只限於設定 cookie 的 主機(host-only),例如從 app.example.com 回應的 cookie,只有 app.example.com 會送出。
    • Domain=example.comDomain=.example.com:允許 example.com 以及所有子域(如 www.example.com, shop.example.com)在對應請求時送該 cookie。
  • 範例:
    • Set-Cookie: lang=en; Domain=example.com; Path=/www.example.comapi.example.com 都會送出 lang
  • 注意:不能設定一個「更高階域名」超出你當前回應的 host(瀏覽器會阻擋,避免跨站點偽造)。

Secure

  • 作用:只有在 HTTPS(安全通道)請求時,瀏覽器才會送出該 cookie。
  • 範例:
    • Set-Cookie: session=abc; Secure → 在 https:// 時才會送;http:// 不會送。
  • 實務建議:所有敏感 cookie(session token)都應該加 Secure,確保不會在未加密連線被竊聽。

HttpOnly

  • 作用:瀏覽器不允許 JavaScript 用 document.cookie 存取該 cookie。
  • 範例:
    • Set-Cookie: session=abc; HttpOnly → XSS(跨站腳本)若成功執行,也無法用 JS 讀走這個 cookie。
  • 實務建議:把認證用的 session id、token 設為 HttpOnly,可以顯著降低被 XSS 偷走 cookie 的風險。

其他重要屬性

Expires / Max-Age

  • 用途:控制 cookie 的壽命(是否為 Session cookie 或 Persistent cookie)。
    • Expires:指定一個日期時間(GMT),到期則刪除。
    • Max-Age:以秒數表示有效期(Max-Age=3600 表示 1 小時)。Max-Age 優先於 Expires。
  • 範例:
    • Set-Cookie: id=1; Max-Age=3600 → 1 小時後到期。
    • 不指定 Expires / Max-Age → session cookie(關閉瀏覽器即消失,視瀏覽器行為而定)。

SameSite

  • 目的:控制 cookie 在跨站請求(cross-site)時是否被送出,減少 CSRF 攻擊面。
  • 三個值:
    • SameSite=Strict:最嚴格,只有當請求是「同源導航」時才送 cookie(例如從 example.com 內部點連結)。跨站點導向(例如從 evil.com 的一個連結導向 example.com)不會送 cookie。
    • SameSite=Lax:較寬鬆,允許一些「安全性較高的跨站情況」送 cookie(例如 GET 導航),但在跨站 POST 或子資源請求(iframe、圖片 POST)通常不送。現代瀏覽器的預設通常為 Lax
    • SameSite=None:允許跨站送 cookie,但必須配合 Secure(也就是只能在 HTTPS 上使用 SameSite=None; Secure)。
  • 範例:
    • Set-Cookie: id=1; SameSite=Strict; Secure; HttpOnly
  • 實務:若 cookie 被用於跨站 API 或 SSO 等場景,可能需要 SameSite=None; Secure;對於一般 session cookie 建議 Lax 或 Strict 以防 CSRF。

Cookie 前綴

這是瀏覽器強制的命名約束(有助於提升安全):

  • __Secure-
    • 必須有 Secure 屬性
    • Set-Cookie: __Secure-ID=abc; Secure; Path=/;(且不能由不安全 HTTP 設定)
  • __Host-(更嚴格):
    • 必須有 Secure
    • 不能有 Domain(即必須是 host-only)
    • Path 必須是 /
    • 例如:Set-Cookie: __Host-session=abc; Secure; Path=/;
  • 好處:用這些前綴可以強制 cookie 更安全且避免被子域或第三方誤用。

上一篇
[ Day 26 ] 簡單介紹cookie給你聽
系列文
從0基礎開始起飛,一起一步步踏入資安27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言