Skip to content

アクセストークンを無効化・ロール変更で即時失効させ、CSV出力の数式インジェクションを防ぐ - #32

Open
msmsrep wants to merge 1 commit into
fix/maintenance-record-rolefrom
fix/token-revocation-csv-injection
Open

msmsrep wants to merge 1 commit into
fix/maintenance-record-rolefrom
fix/token-revocation-csv-injection

Conversation

@msmsrep

@msmsrep msmsrep commented Oct 23, 2026

Copy link
Copy Markdown
Owner

概要

脆弱性レビューで見つかった2件と、その途中で見つかった既存バグ1件の修正。#31 の上に積んでいる(Spec.md の改訂144に続けて改訂145を足しているため)。

変更

  • アクセストークンの即時失効(Spec.md 7.4)
    • アクセストークンに Identity の SecurityStamp を載せ、検証のたびにDBの値・有効フラグと照合する(Api/AccessTokenValidation.cs)
    • 無効化・ロール変更で UpdateSecurityStampAsync を呼ぶ(UsersController とユーザーCSV取込の両方)
    • これまではリフレッシュトークンだけを失効させていたため、無効化・ロール変更後も最大60分は古いトークンで操作できた
    • ロール変更だけならリフレッシュトークンは生きているので、クライアントはサイレント更新で新しいロールに切り替わる(再ログイン不要)
    • 照合結果はキャッシュしない(リクエストごとに主キー検索1回)
  • CSV出力の数式インジェクション対策(Spec.md 3.8)
    • 先頭が = @ タブ CR、または数値でない + - の値に ' を付けて出力する(CsvFile.cs)
    • 取込では同じ印を外すので、出力したCSVをそのまま取り込み直しても値は変わらない
  • 既存バグ:Identity のトークンプロバイダが未登録で、管理者のパスワードリセット(API・ユーザーCSVの InitialPassword・デスクトップ版の初期管理者パスワード再生成)が500になっていた → AddDefaultTokenProviders() を追加

確認

  • dotnet build 成功(新規警告なし)
  • dotnet test 全緑(API 285件・画面 229件)。追加テスト:AuthTests(ロール変更・無効化・パスワードリセット後に古いトークンが401、ロール変更後はリフレッシュで新ロール)、MasterCsvTests(数式の印と取り込み直しでの復元)
  • 実DB(PostgreSQL / SQL Server)では未実施(スキーマ変更なし、追加クエリは主キー検索のみ)

配備時の注意

配備前に発行されたアクセストークンにはスタンプが無いため一度だけ401になるが、クライアントが自動でリフレッシュするので利用者の操作は不要。

🤖 Generated with Claude Code

- アクセストークンに SecurityStamp を載せ、検証のたびにDBの値・有効フラグと照合する(Api/AccessTokenValidation)。
  これまではリフレッシュトークンだけを失効させていたため、無効化・ロール変更後も最大60分は操作できた
- 無効化・ロール変更で UpdateSecurityStampAsync を呼ぶ(単票API・ユーザーCSVの両方)
- Identity のトークンプロバイダが未登録で、管理者のパスワードリセット(API・ユーザーCSVの InitialPassword・
  初期管理者の再生成)が例外になっていたのを AddDefaultTokenProviders で直した
- CSV出力で先頭が = @ タブ CR、または数値でない + - の値に ' を付ける。取込では外す(出力をそのまま取り込み直せる)
- Spec.md 7.4・3.8、改訂145

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant