保护ASP.NET MVC中URL的ID

Mar*_*tin 4 security asp.net-mvc

我正在使用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);

也许有一种更好的方式或方式我没有想到.您首选的方法是防止此问题?

Dar*_*rov 9

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

  • 我同意.您应确保该用户有权编辑该项目. (2认同)

Fre*_*dou 5

永远不要相信用户输入,始终检查它是否可以访问它.