1

MVC 5 アプリケーションを開発しています。Veracodeを使用してセキュリティ スキャンを実行しているときに、次のような欠陥が表示されます。

「動的に決定されるオブジェクト属性の不適切に制御された変更」

そして、修正への参照としてこのリンクを追加しました。

HTTP Post を使用してコントローラー関数にBind Attributeを実装しようとしましたが、問題は修正されました。

したがって、ASP.NET MVCでは、セキュリティ違反を回避するために、すべての Post にバインド属性を使用することが必須ですか?

または、この欠陥を無視するか、ハード コーディングとバインド属性の維持がリアルタイム アプリケーションで非常に困難になるため、これに対処できる他の代替方法を無視できますか。

あなたの意見を共有してください。

4

1 に答える 1

2

Bind 属性の使用は必須ではありません。

あなたが投稿したリンクは、基本的に彼らが思いついた最も汚い例です。彼らは EF モデルをコントローラーに直接バインドしていますが、これは実際のアプリケーションでは行われません。私は、Miscrosoft が嫌いです。Miscrosoft は、これがあなたのものではないことを説明せずに、最も汚い最悪の実践パターンを適用することで、DB から Web に簡単に移行できることを示しています。実生活でやりたい。

実際には、View に合わせた (View)Model を作成します。これは、クラスが要求から受け入れたいプロパティのみを持つことを意味するため、ほとんどの場合、Bind 属性は実際には必要ありません。

EF モデルはデータ層の低レベル クラスであり、IMO のコントローラーにバインドしないでください。

更新:実際には、リンクの上部にこれを投稿しました:

注: コントローラーとデータ アクセス レイヤーの間に抽象化レイヤーを作成するために、リポジトリ パターンを実装するのが一般的な方法です。これらのチュートリアルをシンプルにし、Entity Framework 自体の使用方法を教えることに重点を置くために、リポジトリは使用しません。リポジトリを実装する方法については、ASP.NET データ アクセス コンテンツ マップを参照してください。

ただし、これはデータ層を抽象化するのに適したパターンであるリポジトリ パターンについて話しているだけですが、リポジトリ パターンが返す DTO は、ビューにバインドするにはまだ低レベルです。

ビューに合わせて調整されたモデルを作成する必要があり、コントローラーまたはサービスレイヤーで、異なるレイヤー間のインフラストラクチャマッピングを実行できます。

于 2015-04-09T12:02:31.997 に答える