ASP.NET MVC如何避免调用URL直接

时间:2012-07-20 13:18:18

标签: asp.net-mvc asp.net-mvc-routing

我的控制器中有一个执行删除操作的操作方法:

private ActionResult Delete(int id)
{           
     if (delete(id))
     {
          return Content("success");
     } 
     else 
     {
          return Content("something went wrong!");
     }

}

我用jQuery ajax以这种方式从我的视图中调用它:

jQuery('#NotificationArea').load('/MyController/Delete/5');

为此,我需要在global.asax中注册controller-action:

routes.MapRoute(
   "Delete",
   "MyController/Delete/{id}",
   new { controller = "MyController", action = "Delete" }
);       

但我已经意识到这很危险,因为每个人都可以直接从浏览器调用此操作并更改id以删除其他元素:

myDomain.com/MyController/Delete/20

如何避免这种潜在的安全问题?

2 个答案:

答案 0 :(得分:1)

一个选项是在删除功能的顶部使用[HttpPost]属性。这样,只有当您加载的页面发布数据并直接点击该URL时,它才会起作用。

您还可以在页面上放置一些内容,以便只有来自同一页面的帖子才有效。一些属性。让我回答你。

答案 1 :(得分:1)

您实际上可以使用AcceptVerbs属性修饰Delete操作方法。您可以阅读此article了解详细信息。