2
我想创建一个静态分析代码规则,以便任何控制器的方法必须继承AllowAnonymous或Authorize,或者具有显式的AllowAnonymous或Authorize属性 - 以便每个操作都被明确地解决方式或其他。配置静态分析来检测不安全的MVC路由
任何指导如何做到这一点 - 或者如果你看到更好的解决方案 - 将不胜感激。
我想创建一个静态分析代码规则,以便任何控制器的方法必须继承AllowAnonymous或Authorize,或者具有显式的AllowAnonymous或Authorize属性 - 以便每个操作都被明确地解决方式或其他。配置静态分析来检测不安全的MVC路由
任何指导如何做到这一点 - 或者如果你看到更好的解决方案 - 将不胜感激。
推荐的方法是在全球注册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();
}
}
是的,我已经实现了这一点,但我想强制开发人员明确标识每个属性是否需要登录。 –
我明白了。也许更好的方法是做一个单元测试来验证这一点,并设置你的构建过程失败,如果失踪。这肯定会强制这件事。 – NightOwl888
是的,这不是一个坏主意,但我想提出一个规则集,我可以将其应用于我们所有的MVC项目。单元测试将被绑定到特定的项目,并且必须为每个项目重写。不过,我认为这是我的计划B. –