説明
登録やプロフィール更新のリクエストから 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"
};
解説:
- 変更前: リクエストのロールや権限フィールドをアカウントに割り当てると、ユーザーが自分に高い権限を付与するおそれがあります。
- 変更後: クライアント入力からロールや権限フラグをバインドしないでください。