4

ビューでドメインオブジェクトを使用するのがなぜ悪い習慣なのか混乱していますか?バインディング攻撃のモデル化に任せることができると言われていますが、これが何であるか、またはどのように実行できるかは正確にはわかりません。また、プロパティをビューモデルにコピーすることでこの問題がどのように解決されるかについてもよくわかりません。

前もって感謝します

4

4 に答える 4

4

ドメインオブジェクトには、多くの場合、フラグやビットを定義するプロパティやisAdmin, isDeleted, isAuthorized、最終的なユーザーに混乱させたくないその他のセキュリティ情報や機密情報が含まれています。読み取り専用の状態でのみ表示する場合でも、プロパティ名を指定します。 view / html、一部の「スマートユーザー」にPOSTアクションを試す機会を与えます。適切な予防策を講じなかった場合、これはセキュリティホールにつながる可能性があります。

ViewModelを使用する場合、ViewModel <-> Model(ドメインオブジェクト)からの再マップを強制されます。この再マップでは、次のような特定のユーザーからの割り当てが必要なものであることを確認できます。

if(CurrentUser.IsAdmin)
{
   //Assign just if the currrent user is admin
   Model.IsDeleted = ViewModel.Delete;
}
于 2012-09-01T15:03:28.087 に答える
1

ドメインオブジェクトには、クライアントコードから直接影響を与えてはならない、などIsAuthenticatedの機密情報を含めることができます。UserRoles

ドメインオブジェクトに画面に表示するプロパティ以外のものが含まれていない場合は、そもそもドメインモデルは必要ないかもしれません。

于 2012-09-01T14:50:24.813 に答える
1

上手。ユーザーは、ドメインオブジェクトの任意のフィールドを変更できます。これが、ASPMVCでのモデルバインディングの仕組みです。彼らがする必要があるのは、それを投稿する前にフォームを変更することです。たとえば、Chrome/Firefox開発ツールを使用できます。

私はそれについてブログを書きました:http://blog.gauffin.org/2011/07/three-reasons-to-why-you-should-use-view-models/

于 2012-09-01T15:34:28.500 に答える
1

ビューでドメインモデルを使用することは必ずしも悪いことではありません。モデルバインディング攻撃は、編集を目的としていないプロパティの値を提供します。モデルバインディング攻撃を防ぐには、アクションパラメータをBindAttributeでマークし、バインドが許可されているプロパティのリストでExcludeまたはInclude(より適切)を指定します。

于 2012-09-01T15:48:43.913 に答える