2012-01-21 118 views
2

快速的问题;安全的ASP.NET MVC呼叫控制器

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

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

什么是最好的做法,只允许我的应用程序能够调用它?

由于

+0

你的应用程序是什么? – epignosisx

回答

3

装点处理法与[ChildActionOnly]属性将确保一个控制器上的处理法不能直接通过输入URL用户调用。 EG

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

嗨柔道,它工作,如果通话是从控制器完成的。我使用$ .ajax从jQuery中调用了一些控制器的功能,当我这样做时,如果控制器操作像您一样装饰,我会得到一个500错误。我怎么能够从jquery调用这个动作,并仍然像这样装饰它? – IGIT

+0

对于ajax场景,您将需要实现[AjaxOnly]属性,这里有一个简单的演示http://helios.ca/2009/05/27/aspnet-mvc-action-filter-ajax-only-attribute/。 – Judo

+0

但这是否意味着任何人都可以使用ajax调用它? – IGIT

0

您可以在MVC3和Ajax中使用AntiForgeryToken。

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

在你看来,在任何地方,输出:

@Html.AntiForgeryToken() 

而在你的Ajax调用包括像在后的变量此值:

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

而在你的控制器:

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

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