0

ASP.Net MVC 3 Web アプリケーションを開発しています。一部のビュー内で表形式のデータをユーザーに表示し、テーブル内の各レコードの横に [編集] リンクがあります。ユーザーがこのリンクをクリックすると、レコードを編集および更新できる編集ページが表示されます。

私の問題は、ユーザーが編集リンクをクリックすると、URL が次のようになることです。

http://www.mytestsite.com/myData/edit/3

「3」は更新されるレコードの ID ですが、ユーザーが「3」を別の数字に変更することを妨げるものは何もありません。これは、ユーザーが属していないレコードを潜在的に編集できることを意味します。

これが起こらないようにする方法について、誰かが解決策を持っていますか?

助けてくれてありがとう。

4

3 に答える 3

3

アプリケーションに認証と承認を導入する必要があります。これは、これを開始する方法に関する多くの記事の 1 つです。さらに、ログオンしたユーザー ID を保存する方法と、最初に作成されたときにこれをレコードに添付する方法を検討する必要があります。その後、サーバー上で、最初にレコードを作成したユーザー (または、システム上でこれを行うことを許可するロールを持つユーザー) によって後続の編集要求が行​​われていることを検証する必要があります。管理者)。

ID が URL に表示されていない場合でも、悪意のあるユーザーは HTTP リクエストを操作して任意の ID を渡すことができます。安全なシステムでは、常に、常に、現在ログオンしているユーザーが要求されたアクションを実行する権限を本当に持っていることを常に検証する必要があります。これを判断するために、ブラウザーから返されるものに依存するべきではありません (通常、MVC フレームワークによって安全に管理される認証コンテキストは別として)。

于 2012-05-21T12:47:25.683 に答える
2

誰がこの特定のリソースに対する編集権限を持っているかについての情報をテーブルに持っているべきだと思います。例 : テーブルには、CreatedByIdこのレコードを作成したユーザーの ID を格納する " " 列があるとします。ここで、編集アクション メソッドCreatedByIdで、現在のアイテムの " " が現在のユーザーの " " と同じであることを確認しUserIdます (そこに保存した場合は、セッションから取得できます)。このようなもの。

public ActionResult Edit(int id)
{
  int currentUserID=1; // TO DO : get this value from session or somewhere

  ProductVieWModel product=myRepo.GetProduct(id);

  if(product!=null)
  {
     if(product.CreatedById==currentUserID)
     {
        return View(product);
     }
     else
     {
        return View("NotAutherized");
     }
  }
  return View("ProdcutNotFound");

}
于 2012-05-21T13:04:51.960 に答える
-1

このような状況で役立ち、ユーザーが次の値を簡単に推測できないため、GUID データ型を使用してみてください。

于 2012-06-15T09:44:35.153 に答える