身分不是萬用通行證
Authentication 回答「你以什麼身分通過驗證」,authorization 回答「這個身分能做什麼」。同一個帳號可以讀取自己的報告,卻沒有修改別人報告或管理系統的權限。
權限提升表示取得原先沒有的較高能力。判斷時要比較提升前後的有效權限與動作證據,不能只因為命令成功或頁面顯示「admin」就宣稱已控制整個系統。
用最小權限縮小影響範圍
最小權限讓主體只取得工作所需的能力;預設拒絕讓未明確允許的請求被拒絕。把主體、資源與動作列成矩陣,可避免「有登入就全部允許」這類模糊規則。
驗證應同時包含可做與不可做的動作。若讀者角色能讀報告卻不能刪除,兩個結果都要確認。日常帳號與管理工作分離,可以減少錯誤或帳號遭濫用時的影響。
例子:報告讀者與維護者
合成系統有 reader 和 maintainer 兩個角色。reader 應只能讀自己的報告;maintainer 能更新報告,但不能變更帳號角色。
權限可拆成讀、寫、角色管理三個動作。維護報告的需要不會自動帶來帳號管理能力。每個判斷都應在可信的伺服端執行。
判斷:權限矩陣必須明列拒絕項目,並驗證它們。
紙上練習:補完權限矩陣
使用本文虛構角色,不變更實際帳號。
- 列出 reader、maintainer 與三個動作。
- 按例子填入允許或拒絕,再加入「reader 讀別人的報告」。
- 寫出一個正向檢查與一個拒絕檢查。
預期結果
reader 的寫入與角色管理被拒絕;maintainer 的角色管理也被拒絕;reader 不能讀他人的報告。
自行檢核
為何隱藏「刪除」按鈕不能取代伺服端授權?
結束與清理
保存矩陣即可;沒有權限變更需要回復。