ユーザー入力によるロール割り当て

C#のユーザー入力によるロール割り当て

説明

登録やプロフィール更新のリクエストから Role、IsAdmin、IsPrivileged などの権限フィールドをそのまま受け取ってアカウントに保存すると、ユーザーが自分の権限を引き上げるおそれがあります。

想定される影響

  • 一般ユーザーが自分に管理者などの特権ロールを割り当てる可能性があります。
  • 権限チェックを回避し、管理機能、機密データ、内部処理にアクセスされるおそれがあります。

対処方法

クライアントのリクエストモデルからロールや権限のフィールドを除外してください。ロールの変更は別の管理機能で行い、呼び出し元にそのロールを付与する権限があるかをサーバー側で確認してください。

例

変更前

csharp
var user = new User
{
    Email = request.Email,
    Role = request.Role ?? "User"
};

変更後

csharp
var user = new User
{
    Email = request.Email,
    Role = "User"
};

解説:

  • 変更前: リクエストのロールや権限フィールドをアカウントに割り当てると、ユーザーが自分に高い権限を付与するおそれがあります。
  • 変更後: クライアント入力からロールや権限フラグをバインドしないでください。

参考資料