1

MVC4 アプリケーションがあり、編集フォームのモデルを設定しています。

public class GuestEventModel{

    public String name {get;set;}
    public Int32 GuestID {get;set;}
    public String Address {get;set;}
    public Int32 EventID {get;set;}


}

私のフォームで使用@Html.HiddenFor(m=> m.EventID)して@Html.HiddenFor(m=> m.GuestID)いるため、ポストバックでは、モデルにこれらの詳細が入力されています。システム全体でコードを繰り返して、現在ログインしているユーザーがこれらの顧客の詳細を更新できるかどうか、および顧客がイベントに属しているかどうかを確認する必要があることに気付きました。

  1. inspect 要素などを使用してソース コードを変更して、CustomerID フィールドを編集しないようにするにはどうすればよいですか? これにより、システムが間違った顧客情報を間違った ID に対して更新するという問題が発生しますか?
  2. どうすればこれを止めることができますか?
4

2 に答える 2

2

これは非常に一般化された問題であり、対処する方法はたくさんあります。Data Access Layerただし、すでにユーザー ID に関連付けられているデータのみを取得するように制限することができます。

ユーザーがシステムで正常に認証されたら、 を に保持するuserIdか、Session内で暗号化Cookieする必要があります。userId を渡すためにクライアント側に依存しないでください。

次に、あなたGuestEventModelは次のようになります。

public class GuestEventModel
{
    public Int32 UserId { get; set; } // could also be a reference to a 'User' object
    public String name {get;set;}
    public Int32 GuestID {get;set;}
    public String Address {get;set;}
    public Int32 EventID {get;set;}
}

次に、データレイヤー/リポジトリにアクセスするときはいつでも:

public ActionResult Show(Int32 id)
{
     // assuming you changed your DAL/Repository accordingly
     var guestEvent = dataSource.GetUserEventById(id, Session["userID"] as Int32);

     // or.., assuming your DAL/Repository exposes IQueryable
     var guestEvent = dataSource<GuestEventModel>
                          .Where(x => x.UserId == Session["userID"] as Int32)
                          .Single(x => x.Id == id);

     // ....
     return View(eventViewModel);
}
于 2013-07-14T08:32:44.257 に答える
0

あなたが指摘したように、ユーザーがこのクライアント側を編集するのを止めるものは何もありません。

ただし、HTML から入力する必要はありません。post メソッド内で、EventID と GuestID をサーバーからモデルに割り当てて、だれも変更できないようにすることができます。

public ActionResult SaveEvent(GuestEventModel model) {
   model.EventID = this.Database.GetEventId();
   model.GuestID = this.Database.GetGuestId();
}
于 2013-07-14T08:01:54.160 に答える