我正在使用ASP.NET MVC中的典型CRUD应用程序,其中将有多个用户帐户,每个用户帐户都有许多项目。
当用户正在编辑项目时,他们将在 / edit / 5 等URL上执行此操作,其中数字表示数据库中行的ID。
我担心一个用户只需将ID更改为另一个用户项目的ID并能够更改它。为了保护ID,我发现了以下解决方案:
保留可读ID,并在项目查询中包含登录用户的UserID,以便查询如下:
database.Items.SingleOrDefault(c => c.UserID == [当前登录的用户ID]&& c.ID == itemID);
也许有更好的方式或方式我没有想到。您首选防范此问题的方法是什么?
答案 0 :(得分:9)
绝对是第三种解决方案。从加密 Cookie(参见FormsAuthentication)获取登录用户ID,并在SQL查询中使用它来验证该项目是否属于该用户。
答案 1 :(得分:5)
永远不要信任用户输入,始终检查它是否有权访问它。
答案 2 :(得分:0)
将UserID存储在Session集合中。