ビューでドメインオブジェクトを使用するのがなぜ悪い習慣なのか混乱していますか?バインディング攻撃のモデル化に任せることができると言われていますが、これが何であるか、またはどのように実行できるかは正確にはわかりません。また、プロパティをビューモデルにコピーすることでこの問題がどのように解決されるかについてもよくわかりません。
前もって感謝します
ビューでドメインオブジェクトを使用するのがなぜ悪い習慣なのか混乱していますか?バインディング攻撃のモデル化に任せることができると言われていますが、これが何であるか、またはどのように実行できるかは正確にはわかりません。また、プロパティをビューモデルにコピーすることでこの問題がどのように解決されるかについてもよくわかりません。
前もって感謝します
ドメインオブジェクトには、多くの場合、フラグやビットを定義するプロパティやisAdmin, isDeleted, isAuthorized
、最終的なユーザーに混乱させたくないその他のセキュリティ情報や機密情報が含まれています。読み取り専用の状態でのみ表示する場合でも、プロパティ名を指定します。 view / html、一部の「スマートユーザー」にPOSTアクションを試す機会を与えます。適切な予防策を講じなかった場合、これはセキュリティホールにつながる可能性があります。
ViewModelを使用する場合、ViewModel <-> Model
(ドメインオブジェクト)からの再マップを強制されます。この再マップでは、次のような特定のユーザーからの割り当てが必要なものであることを確認できます。
if(CurrentUser.IsAdmin)
{
//Assign just if the currrent user is admin
Model.IsDeleted = ViewModel.Delete;
}
ドメインオブジェクトには、クライアントコードから直接影響を与えてはならない、などIsAuthenticated
の機密情報を含めることができます。UserRoles
ドメインオブジェクトに画面に表示するプロパティ以外のものが含まれていない場合は、そもそもドメインモデルは必要ないかもしれません。
上手。ユーザーは、ドメインオブジェクトの任意のフィールドを変更できます。これが、ASPMVCでのモデルバインディングの仕組みです。彼らがする必要があるのは、それを投稿する前にフォームを変更することです。たとえば、Chrome/Firefox開発ツールを使用できます。
私はそれについてブログを書きました:http://blog.gauffin.org/2011/07/three-reasons-to-why-you-should-use-view-models/
ビューでドメインモデルを使用することは必ずしも悪いことではありません。モデルバインディング攻撃は、編集を目的としていないプロパティの値を提供します。モデルバインディング攻撃を防ぐには、アクションパラメータをBindAttributeでマークし、バインドが許可されているプロパティのリストでExcludeまたはInclude(より適切)を指定します。