保护ASP.NET MVC调用控制器

时间:2012-01-21 01:38:28

标签: asp.net-mvc asp.net-mvc-3 model-view-controller

快速提问;

给予控制器用户和和功能让某人可以打电话;

mydomain.com/user/get并访问那里的功能。

只允许我的应用程序调用它的最佳做法是什么?

由于

2 个答案:

答案 0 :(得分:3)

使用[ChildActionOnly]属性修饰Action方法将确保输入URL的用户无法直接调用控制器上的Action Method。 EG

 [ChildActionOnly]
        public ActionResult _CantNavigateHere()
        {
            return View();
        }  

答案 1 :(得分:0)

您可以将AntiForgeryToken与MVC3和Ajax一起使用。

我就是这样做的。 (当然,这不是万无一失,但增加了另一层安全性)

在您的视图,任何地方,输出:

@Html.AntiForgeryToken()

在你的Ajax调用中,在post变量中包含这个值,如:

$.post("/Controller/Action/",
                { 'id': var_id, '__RequestVerificationToken': $("input[name='__RequestVerificationToken']").val() }, 
                function (data) { /* handle request */ });

在你的控制器中:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Action(int id) {..}

除此之外,您还可以检查引荐主机并拒绝任何与您的域不匹配的主机。这可能是欺骗性的,但同样,只是要添加的另一层。