2009-11-12 66 views
4

我正在处理ASP.NET MVC中的一个典型的CRUD应用程序,其中将有多个用户帐户,每个用户帐户都有多个项目。保护ASP.NET MVC中的URL上的ID

当用户正在编辑项目时,他们将在URL上执行此操作,例如/edit/5,其中数字表示数据库中行的ID。

我对一个用户简单地将ID更改为另一个用户的项目的ID并能够更改它有一些担忧。为了保护ID,下面的解决方案已经发生在我身上:

  1. 进行加密,这样就不能轻易改变 - 但是我当然有代码每次回发到解密。
  2. 更改数据库模式,以便在ID旁边也生成GUID,并在URL中使用该GUID。
  3. 保留可读ID作为是并包括已登录用户的用户ID中的查询的项,以便查询看起来像:

    database.Items.SingleOrDefault(C => c.UserID == [当前登录in user ID] & & c.ID == itemID);

也许有更好的方法或我没有想到的方法。您希望避免这个问题的首选方法是什么?

回答

9

绝对是第三种解决方案。从加密的 cookie(参见FormsAuthentication)获取已登录的用户标识,并在SQL查询中使用它来验证该项目是否属于该用户。

+2

我同意。您应该确保该用户有权编辑该项目。 – pattersonc 2009-11-12 16:09:29

5

永远不要信任用户输入,总是检查它是否有权访问它。

0

将用户标识存储在会话集合中。