マスアサインメント

C#のマスアサインメント

説明

リクエスト本文をドメインオブジェクトに直接バインドして保存すると、管理者かどうか、残高、権限などの内部フィールドを攻撃者に上書きされるおそれがあります。

想定される影響

  • 権限昇格、アカウント属性の改ざん、内部状態の不正な変更につながる可能性があります。

対処方法

リクエスト用のDTOを別に用意し、許可したフィールドだけをドメインオブジェクトに明示的にコピーしてください。

例

変更前

csharp
currentUser = model;

変更後

csharp
currentUser.Name = dto.Name;
currentUser.Email = dto.Email;

解説:

  • 変更前: リクエスト本文をドメインオブジェクトに直接バインドすると、権限に関わるフィールドや内部フィールドを上書きされるおそれがあります。
  • 変更後: リクエストをDTOにバインドし、許可したフィールドだけをドメインオブジェクトに明示的にコピーします。

参考資料