縱深防禦安全性
概述
安全性是多層次的,假設任何單一層都可能失效,並授予能夠運作的最小權限。攻擊者會找到你遺漏的那一層——依賴單一牆壁的系統,當那堵牆出現一個漏洞時就會崩潰;重疊的最小權限控制能夠承受任何單一控制的失敗。
原則(通用)
- 在建構任何處理不受信任輸入、密碼或使用者資料的項目之前,先進行威脅模型分析。 對每個新攻擊面執行輕量級的 STRIDE 檢查(偽造、竄改、否認、資訊洩漏、拒絕服務、權限提升)。記錄模型與緩解措施(參見
recording-decisions)。 - 縱深防禦。 沒有任何單一控制是「唯一」的安全性。驗證、授權、輸入驗證和資料層強制執行各自假設其他層可能被繞過。
- 處處最小權限——角色、權杖、服務帳戶、資料庫授權。預設不授予任何存取權;僅授予最低限度;撤銷未使用的權限。
- 密碼永遠不應存在於程式碼、映像檔或已提交的配置中。 它們應在執行時期從密碼存放區取得,定期輪換,並僅限於需要它們的工作負載。
- 在信任邊界驗證所有輸入;將每個外部系統的輸出視為不受信任的資料,而非指令。
- 相依供應鏈是一個攻擊面。 鎖定並執行完整性檢查的 Lockfile;掃描並更新相依項目;固定並掃描基底映像。
- 敏感操作須受稽核——記錄誰做了什麼、何時做——以便能夠重建濫用或錯誤事件。
快速參考
| 攻擊面 | 首要問題 |
|---|---|
| 接受使用者輸入的新端點 | STRIDE 模型是什麼?驗證在哪裡?能運作的最小角色是什麼? |
| 任何包含密碼的項目 | 它是否在密碼存放區(而非程式碼或映像檔)?是否已限定範圍?可輪換嗎? |
| 新的相依項目 | Lockfile 已鎖定?已掃描?它是否受到良好支援? |
| 特權操作 | 是否已稽核?操作者是否在資料層(而非僅應用程式層)獲得授權? |
堆疊機制
RLS 作為最終強制執行層,GraphQL 深度/成本限制作為拒絕服務控制,Key Vault 用於密碼,pnpm audit/Trivy 用於 CI——參見 postgres-postgraphile-rls-and-sql 和 cloud-delivery-aks。
強制執行: CI 中的相依性審計 + 映像掃描 + 密碼掃描(封鎖);威脅模型與稽核覆蓋率屬於審查者判斷。
完整理由:憲法第 X 條與第 XIV 條,捆綁於 engineering-constitution/references/engineering-constitution.md。