# セキュリティと運用

- 1導入=1組織。メンバーは同じ業務データを共有します。閲覧者もデータをエクスポートできます。
- パスワードはランダムsalt付きPBKDF2-SHA256（100,000回）で保存。パスワードの平文は保存しません。
- セッションとAPIトークンはランダム値を発行し、DBにはSHA-256のハッシュを保存。セッションは7日、トークンは指定した期限で失効します。
- CookieはHttpOnly・SameSite=Strict、本番HTTPSではSecure。Cookieによる更新は同一Originを検査します。
- 認証操作はIPハッシュごと15分8回まで。ログイン以外の初期設定・参加・パスワード変更もこの制限を共有します。
- APIの書き込みでは役割とトークンscopeの両方を検査。変更競合はrevisionで拒否します。アーカイブ済み親への書き込みも保存時に再検査します。
- 原稿の承認後に内容・対象・日時・URLを編集すると承認が解除されます。外部送信機能はありません。
- HTMLとして原稿を実行しません。表示値はエスケープし、CSP、nosniff、フレーム拒否を付与します。
- 初回管理者は、秘密のセットアップコードを持つ人だけが1回登録できます。登録後は初期セットアップを再実行できません。
- 招待リンクは48時間、1回限り。同じメールへの再発行で、未使用の旧招待を無効にします。
- 更新履歴は専用DBに保存。APIトークン経由は操作した人に「(AI)」を付けます。ログへトークン本体やパスワードは記録しません。

## 対応していないこと

SSO、2要素認証、パスワード再設定メール、組織内の案件別アクセス制限、監査ログの改ざん耐性、添付ファイルの保存、外部配信の自動化は含みません。Cloudflare Access等を組み合わせる場合、APIクライアントの接続方法も環境の管理者が設定してください。

## インシデント時

トークンが漏れた場合は画面から失効。メンバーを停止するとそのメンバーのセッション・トークン利用を止めます。パスワード変更は既存セッションをすべて終了しますが、通常のパスワード変更だけでは既存の個人トークンを失効しません。漏洩時はトークンも失効してください。

管理者の復旧スクリプトは対象者のセッションと個人トークンを両方失効します。環境の秘密ファイルとD1バックアップも機密扱いにしてください。

## 不具合の報告

一般的な不具合は再現手順・バージョン・期待する動作を添えてください。脆弱性や秘密情報を含む報告は公開Issueに書かず、リポジトリ管理者へ非公開で連絡してください。顧客データや本物のトークンを添付しないでください。
