Asp.net mvc 3 ASP.Net MVC 3查询字符串参数

Asp.net mvc 3 ASP.Net MVC 3查询字符串参数,asp.net-mvc-3,query-string,Asp.net Mvc 3,Query String,我正在开发一个ASP.NETMVC3Web应用程序。在我的一些视图中,我向用户显示表格数据,在表格中的每条记录旁边有一个编辑链接。当用户单击此链接时,会将他们带到一个编辑页面,在那里他们可以编辑和更新记录 我的问题是,一旦用户单击编辑链接,URL就会变成这样 http://www.mytestsite.com/myData/edit/3 “3”是要更新的记录的ID,但是,没有任何东西可以阻止用户将“3”更改为另一个数字,这意味着他们可以编辑不属于自己的记录 有没有人有办法阻止这种情况发生 感谢

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

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

http://www.mytestsite.com/myData/edit/3
“3”是要更新的记录的ID,但是,没有任何东西可以阻止用户将“3”更改为另一个数字,这意味着他们可以编辑不属于自己的记录

有没有人有办法阻止这种情况发生


感谢您的帮助。

您需要在应用程序中引入身份验证和授权。此外,您还需要了解如何存储登录的用户标识,以及如何在创建记录时将其附加到记录中。然后,您必须在服务器上验证后续编辑请求是否由首先创建记录的用户(或在您的系统中具有允许他们执行此操作的角色的用户,如管理员)发出


即使该ID没有显示在URL上,恶意用户仍然可以操纵HTTP请求来传递他们选择的ID。在任何安全系统中,您都应该始终验证当前登录的用户是否真正有权执行请求的操作。您永远不应该依赖浏览器返回的内容来确定这一点(除了由MVC框架安全管理的身份验证上下文。通常情况下)。

您需要在应用程序中引入身份验证和授权。此外,您还需要了解如何存储登录的用户标识,以及如何在创建记录时将其附加到记录中。然后,您必须在服务器上验证后续编辑请求是否由首先创建记录的用户(或在您的系统中具有允许他们执行此操作的角色的用户,如管理员)发出


即使该ID没有显示在URL上,恶意用户仍然可以操纵HTTP请求来传递他们选择的ID。在任何安全系统中,您都应该始终验证当前登录的用户是否真正有权执行请求的操作。您永远不应该依赖浏览器返回的内容来确定这一点(除了由MVC框架安全管理的身份验证上下文。通常情况下)。

我认为您应该在表中包含关于谁拥有此特定资源的编辑权限的信息。例如:在您的表中可能有“
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");

}

我相信你应该在你的表格中有关于谁拥有这个特殊资源的编辑权限的信息。例如:在您的表中可能有“
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");

}

您应该尝试使用GUID数据类型,因为它在此类情况下有帮助,并且用户无法轻松猜出下一个值

我同意,您应该尝试使用GUID数据类型,因为它在此类情况下有帮助,并且用户无法轻松猜出下一个值。我需要实现逻辑以确保试图编辑记录的用户与创建记录的用户相同。谢谢你的帮助,霍尔夫,我同意。我需要实现逻辑以确保试图编辑记录的用户与创建记录的用户相同。谢谢你的帮助。谢谢Shyju,这很有用。谢谢Shyju,这很有用。