0

我正在开发一个 ASP.Net MVC 3 Web 应用程序。在我的一些视图中,我向用户显示表格数据,并且在表格中的每条记录旁边都有一个编辑链接。当用户单击此链接时,它会将他们带到一个编辑页面,他们可以在其中编辑和更新记录。

我的问题是,一旦用户单击编辑链接,URL 就会变成这样

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

“3”是要更新的记录的 ID,但是,没有什么能阻止用户将“3”更改为另一个数字,这意味着他们可以编辑不属于他们的记录。

有没有人可以解决我如何防止这种情况发生的方法?

谢谢你的帮助。

4

3 回答 3

3

您需要在应用程序中引入身份验证和授权。这里有一篇关于如何开始的文章。您还需要弄清楚如何存储登录的用户身份,然后在创建记录时如何将其附加到记录中。然后,您必须在服务器上验证随后的编辑请求是由首先创建记录的用户(或在您的系统上具有允许他们执行此操作的角色的用户发出的,例如行政人员)。

即使 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 回答