持有 Token 與重新輸入密碼不同
登入後,伺服器可能把工作階段識別碼放進 Cookie。後續請求攜帶識別碼,伺服器依此查找身分與狀態。若系統把持有 Token 當成充分條件,取得有效 Token 的人可能不必重新輸入密碼就能使用該工作階段。
因此不要把真實 Token 放進公開截圖、網址或除錯紀錄。此單元只用虛構名稱描述生命週期,不展示或收集任何真實 Cookie。
每個保護處理不同風險
Secure 限制 Cookie 在安全傳輸情境送出;HttpOnly 阻止一般頁面腳本透過 document.cookie 讀取它,但不能阻止所有 XSS 行為。SameSite 約束部分跨站送出情境,也不能取代所有請求授權與 CSRF 防護設計。
登入或權限變更後的識別碼更新、閒置與絕對期限、登出及撤銷都屬於生命週期。只刪除瀏覽器 Cookie,不能自動保證伺服端的舊識別碼已無效;需檢查舊 Token 是否仍被接受。
例子:登出後舊識別碼仍有效
合成流程是登入取得 S1、登出刪除瀏覽器 Cookie,但伺服器仍保存 S1 為有效。
瀏覽器不再自動送出 S1,與伺服器拒絕 S1 是不同狀態。若 S1 曾被複製,單靠刪除 Cookie 無法完成撤銷。
判斷:登出驗收應包含舊工作階段不再被接受。
紙上練習:畫出工作階段狀態
用紙筆與虛構識別碼 S1、S2;不讀取真實 Cookie。
- 畫出未登入、S1 有效、登出、S1 失效四個狀態。
- 加入權限變更後換成 S2 的分支。
- 指出哪個步驟需要伺服端證據。
預期結果
舊識別碼失效需要伺服器拒絕的證據;UI 回到登入畫面不夠。
自行檢核
HttpOnly 是否能保證被注入的腳本無法代使用者送出任何請求?
結束與清理
保留狀態圖;沒有真實工作階段需要清除。