2

大きな問題ではありませんが、間違いなく修正された方が良い問題です。

たとえば、次のようなモデルがあります(読み取り時間を節約するために一部を切り取ったわけではありません。確認フィールドなどがあります:)):

public class NewUser
{
    [Required]
    public string Username{ get; set; }
    [Required]
    public string Password{ get; set; }

    public string Salt{ get; set; }
}

投稿後(検証後)のコードで、パスワードを一方向に暗号化するために使用されるソルトを作成します。モデルにソルトを含めると非常に便利です(省略できることはわかっていますが、省略したくはありません)。

投稿時に、ユーザーが querystring&salt=blahblahblahに追加した場合、ページが投稿されて MVC がモデルと一致するとすぐに、blahblahblah期待どおりにモデルに値が割り当てられます。いつでもできるので、これで問題はありません。これをオーバーライドします。

他のモデルには設定したくない値がいくつかあるため、ポストバックから送信されたものに MVC がモデルの値を割り当てないようにする属性を持つ方法はありますか (私はそれらを本来あるべき状態にリセットするための回避策がありますが、これがないと、誰かがいくつかの値をハッキングしようとした場合に問題が発生する可能性があります)。

4

1 に答える 1

5

モデルバインディング中にBindAttributeを使用してプロパティをホワイト/ブラックリストに登録できます。

モデルレベルでグローバルに適用できます。

[Bind(Exclude="Salt")]
public class NewUser
{
    [Required]
    public string Username{ get; set; }
    [Required]
    public string Password{ get; set; }

    public string Salt{ get; set; }
}

または、個々のコントローラーのアクションレベルで:

public ActionResult MyAction([Bind(Exclude="Salt")] NewUser user)
{
    //...
}
于 2012-06-01T11:22:50.830 に答える