保护ASP.NET MVC中URL的ID

时间:2009-11-12 16:03:19

标签: asp.net-mvc security

我正在使用ASP.NET MVC中的典型CRUD应用程序,其中将有多个用户帐户,每个用户帐户都有许多项目。

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

我担心一个用户只需将ID更改为另一个用户项目的ID并能够更改它。为了保护ID,我发现了以下解决方案:

  1. 对它进行加密以使其无法轻易更改 - 但当然,每次回发时我都必须使用代码对其进行解密。
  2. 更改数据库架构,以便在ID旁边生成GUID,并在URL中使用。
  3. 保留可读ID,并在项目查询中包含登录用户的UserID,以便查询如下:

    database.Items.SingleOrDefault(c => c.UserID == [当前登录的用户ID]&& c.ID == itemID);

  4. 也许有更好的方式或方式我没有想到。您首选防范此问题的方法是什么?

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

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

答案 2 :(得分:0)

将UserID存储在Session集合中。