これまでの回答に感謝します-両方のアプローチの長所/短所を理解するのに大いに役立ちました。他の誰も言及していないことを追加する必要があります。
オーバーポスティング攻撃
DB エンティティに直接バインドする場合の心配な欠点は、「オーバーポスティング攻撃」です。これは、攻撃者が FireBug ほど高度ではないツールを使用して、ユーザーが編集できるようには意図されていないが、DB エンティティに存在するフォーム フィールドを挿入できる場所です。
「プロフィールの編集」ページを考えてみましょう。ビューは次のようになります。
@using(Html.BeginForm() {
<div>
@Html.LabelFor(x=> x.FirstName)
@Html.TextBoxFor(x=> x.FirstName)
</div>
<div>
@Html.LabelFor(x=> x.LastName)
@Html.TextBoxFor(x=> x.LastName)
</div>
<input type="Submit" value="Save" />
}
次の HTML をレンダリングします。
<form action="/profile/edit" method="post">
<div>
<label for="FirstName">FirstName</label>
<input type="text" name="FirstName" value="" />
</div>
<div>
<label for="LastName">LastName</label>
<input type="text" name="LastName" value="" />
</div>
<input type="Submit" value="Save" />
</form>
FireBug を使用すると、攻撃者はフォーム内に HTML のチャンクを挿入するだけで済みます。
<input type="hidden" name="IsAdmin" value="true" />
...そして突然、ユーザーは非常に予期せぬ有害な方法でデータを変更できるようになります。
さらに恐ろしい非表示のフォーム フィールドを次に示します。
<input type="hidden" name="ShoppingCart.Items[0].Price" value="0.01" />
<input type="hidden" name="BankAccount.Balance" value="1000000" />
<input type="hidden" name="User.Administrator.Password" value="hackedPassword" />
痛い!
情報提供元:
http://hendryluk.wordpress.com/tag/asp-net-mvc/