配置静态分析以检测不安全的MVC路由

时间:2015-12-14 23:27:07

标签: c# asp.net-mvc visual-studio static-analysis

我想创建一个静态分析代码规则,以便任何控制器的方法都必须继承AllowAnonymous或Authorize,或者具有显式的AllowAnonymous OR Authorize属性 - 以便每个操作都以某种方式明确地解决。

任何有关如何执行此操作的指导 - 或者如果您看到更好的解决方案 - 将不胜感激。

1 个答案:

答案 0 :(得分:1)

建议的方法是在全局注册AuthorizeAttribute。这实际上意味着在没有登录的情况下,默认情况下不能访问任何操作方法。

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        // Enable white-list security
        filters.Add(new AuthorizeAttribute());
        filters.Add(new HandleErrorAttribute());
    }
}

在Global.asax.cs

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);

        // Register global filters
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();
    }
}

这将有效启用白名单'安全性,这意味着您必须使用公共应该看到的方法(例如主页)上的AllowAnonymous属性明确选择退出安全方案。

public class HomeController : Controller
{
    [AllowAnonymous]
    public ActionResult Index()
    {
        ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

        return View();
    }
}

请注意,您还可以在控制器级别选择退出白名单安全性,默认情况下会使HomeController的所有方法都是匿名的。

[AllowAnonymous]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

        return View();
    }
}