Skip to content

Security Model zh TW

KoukeNeko edited this page Sep 1, 2026 · 1 revision

Security Model

English · 繁體中文

Credential

  • 不接受 command-line password。 密碼只能從 TTY 以不回顯的方式輸入,或改用 token 登入,避免 留在 shell history 與 process 列表中。
  • Token 存在作業系統 keyring,不會寫進設定檔。
  • keyring 的 key 同時包含 profile 與 API URL,換站台不會誤用舊 token。
  • --verbose 的診斷輸出只有 method、路徑、狀態碼與耗時,不含 Authorization header、密碼或 token。

不會外洩的值

以下內容永遠不會出現在成功輸出、list 結果或 dry-run 中:

  • Webhook signing secret
  • Application token 的 auth code,以及帶有 auth code 的 callback URL
  • Project ownership transfer token

重試策略

  • 只有 idempotent 的 GET 會自動重試,且次數有上限、退避時間帶隨機抖動。
  • POST、PATCH、DELETE 不會盲目重送。
  • 少數以 GET 觸發背景工作的 endpoint(例如 project export)被標記為非 idempotent,同樣不重試。
  • 只有 429、502、503、504 會觸發重試;遵守 server 的 Retry-After,上限 30 秒。

寫入的不確定狀態

寫入請求在傳輸途中失敗、或回應無法解析時,CLI 回報 ambiguous_commit(exit code 11),訊息會明說 「可能已經送出,重試前請先確認」。這比自動重送安全 —— 後者可能造成重複建立或重複扣減。

刪除工作項目與 metadata 之後,CLI 會回讀確認目標真的不存在;comment 的編輯、刪除與復原也會回讀比對 時間戳記。無法確認時一律回報 ambiguous_commit,而不是假設成功。

樂觀鎖

所有 mutation 都帶 Taiga 的 version。發生衝突時回報 occ_conflict(exit code 6)並停止 —— 不會自動 merge,也不會覆寫別人的變更。需要明確控制基準版本時使用 --base-version。

破壞性操作

非互動模式下,刪除類指令必須明確提供 --yes,否則回報 confirmation_required(exit code 10)。 互動模式會要求確認。CLI 不會因為「看起來像自動化」就跳過確認。

檔案處理

  • 下載先寫入權限 0600 的暫存檔,驗證後才原子替換目的檔,且預設不覆寫。
  • 設定檔與快取以同樣的 temp-then-rename 方式寫入,權限 0600,目錄 0700。
  • 附件下載不會把 API bearer token 送往 media URL。

傳輸

TLS 驗證預設永遠開啟,沒有停用它的旗標。

Clone this wiki locally