辨認登入前後的權限界線

訪客未登入前,商店可能已有會話,用來保存購物車或語言設定。登入後,同一瀏覽器便可查看私人訂單及地址。危險的捷徑是直接把顧客編號加到原來的匿名會話,卻不更換識別碼。若別人早已設法植入或知道該登入前識別碼,便可能拿它冒充新建立的已登入會話。OWASP 把這類問題稱為會話固定,並要求權限提升後更換會話識別碼。

這個問題不同於設定 cookie 的 Secure、HttpOnly、SameSite、Path 或 Domain。這些屬性很重要,但即使全部設定妥當,登入前後仍沿用同一有效識別碼,風險依然存在。登出規則處理的是日後如何終止會話,也不能證明當初登入的轉換安全。負責人應要求系統證明匿名識別碼在驗證成功時失去權限,而不是只看登入表格有否顯示成功。

同一界線也會出現在其他地方:顧客為敏感帳戶變更重新驗證、員工切換到管理員角色,或使用者完成帳戶恢復,都可能取得更高權限。OWASP 建議在權限變更後重新產生識別碼,敏感頁面只接受新的有效憑證。測試不能只限首次登入。應列出每條會改變權限的路線,說明哪些舊狀態可保留、哪些要清除,以及哪個新識別碼才有權限。

讓權限轉換在語義上完整

憑證驗證成功後,應透過框架支援的方法建立或重新產生不可預測的新會話識別碼,在伺服器把已驗證顧客綁到新會話,並使舊識別碼失效。OWASP 亦主張嚴格的會話管理:伺服器只接受自己發出的識別碼,不會因瀏覽器送來任意值便建立有效會話。不能因 cookie 外觀似乎合理,就把匿名紀錄提升成已登入狀態。框架的重新產生函式如何處理舊值,必須按實際行為驗證。

這是兩個憑證之間的權限交接,不是單純更改 cookie 名稱。登入後若仍用舊識別碼發出請求,不能讀到新登入顧客;用新識別碼則只可查看該顧客有權存取的資料。即使回應途中斷,伺服器綁定身份與撤銷舊會話的結果也應一致。若會話分散儲存在多個節點,可能需要接近交易式的處理或謹慎安排寫入次序。具體方法視技術而定,但可觀察的安全結果必須清楚。

登入前的資料只應按明確規則帶入新會話。購物車可以考慮合併,但結帳前仍須重新核對庫存和價格,亦不能把其他帳戶的私人資料帶過來。語言選擇通常可保留;匿名驗證挑戰或舊角色標記則不應直接複製。最好列出准許遷移的欄位清單。若整個匿名會話物件原封不動複製,可能把過期權限或被人預先放入的跳轉地址悄悄帶到已登入區域。

實測舊識別碼已失去權限

測試應使用兩個互不共享 cookie 的瀏覽器設定檔,而非同一瀏覽器的兩個分頁。在設定檔甲以匿名身份開啟網站,透過受控測試工具記下會話識別碼,然後登入測試顧客。再在安全工具內核對新識別碼,不要貼到工單或聊天。兩個值必須不同。設定檔乙只使用舊值請求私人訂單網址,不應取得已登入顧客的訂單;甲使用新值時,則只能看到指定測試帳戶。

另加一個伺服器從未發出的識別碼作負面測試。嚴格管理應拒絕它,或換成新的匿名會話,不可悄悄接納並在登入後提升權限。其後測試登入後的舊合法匿名值、更換期間仍在途中的舊請求,以及登出後的重播。對私人資源,預期結果仍是拒絕或要求重新驗證。除了瀏覽器畫面,也要查伺服器會話儲存紀錄;單一分頁的跳轉畫面,可能掩蓋另一分頁的 API 回應。

可用一個受控例子驗收:匿名會話有兩件商品,語言設為繁體中文。登入後建立全新已驗證會話,按既定規則帶入語言及合資格購物車項目。舊匿名識別碼此後不能讀取顧客地址或訂單歷史;結帳時仍須重新計算價格及庫存,不能盲信舊購物車。例子中的商品數量只是測試資料,不是實際顧客交易,也不能用來聲稱轉換表現。

讓正式環境持續符合設計

會話更換也可能在系統邊界出錯:某個應用節點較遲寫入共用儲存、快取保留了舊權限判斷,或手機內嵌瀏覽器沿用過期 cookie。推出前應演練這些情況。若系統有多個節點,可經真正的負載分配器或不同節點分別測試新舊識別碼,確認不會出現短暫時段,讓舊值已獲得顧客私人權限。

日誌應足以證明控制有執行,但不能變成另一個憑證庫。有用的紀錄可包括不具登入功能的追蹤編號、「匿名轉已登入」事件、經批准的安全參照、受限制存取的帳戶編號,以及舊會話撤銷是否完成。不要記下原始會話識別碼或密碼。系統若接受未知值,或轉換後舊值反覆被使用,應發出警示;調查時仍須看上下文,因為延遲到達的正常瀏覽器請求,初看可能與攻擊相似。

日後維護時也要保留這項驗收。框架升級、新身份供應商、登入頁改版或會話儲存遷移,都可能改變重新產生識別碼的行為。把「舊值不能讀取私人資料」放進發布檢查表,經實際部署路線執行。企業負責人毋須親自檢查加密實作,也能問對問題:登入前的識別碼在登入後還能否取得顧客私人資料?應以測試紀錄示範答案,而非單靠文件聲稱已保護。

進行前先確認

  • 每次權限提升後,是否建立伺服器發出的新識別碼?
  • 舊識別碼是否仍可讀取私人訂單或地址?
  • 測試是否涵蓋未知識別碼、在途請求及真正部署路線?

資料來源及延伸閱讀