Asp.net mvc asp.net mvc的区域级安全性
我知道可以用Authorize属性修饰控制器以控制访问,但我不知道在一个区域中的所有控制器/视图之间实施安全性的公认或正确的方法 在web.config、区域注册或其他地方是否有应用授权安全性的内容?您可以随时使用Asp.net mvc asp.net mvc的区域级安全性,asp.net-mvc,security,asp.net-mvc-3,Asp.net Mvc,Security,Asp.net Mvc 3,我知道可以用Authorize属性修饰控制器以控制访问,但我不知道在一个区域中的所有控制器/视图之间实施安全性的公认或正确的方法 在web.config、区域注册或其他地方是否有应用授权安全性的内容?您可以随时使用 拒绝或允许 一种方便的方法是创建一个新的基类 [Authorize] public abstract class AuthorizeBaseController : Controller { } 并确保您需要授权的所有控制器(在您的情况下,您关心的区域中的所有内容)都从Autho
拒绝或允许
一种方便的方法是创建一个新的基类
[Authorize]
public abstract class AuthorizeBaseController : Controller
{
}
并确保您需要授权的所有控制器(在您的情况下,您关心的区域中的所有内容)都从AuthorizeBaseController
下降
public class HomeController : AuthorizeBaseController
{
public ActionResult Index()
{
return View();
}
}
[Authorize]
属性应该影响新基类的所有后代
编辑我在使用
方法时遇到的问题是,由于路由引擎使得任何路由都可以调用任何控制器,因此可以根据url(以及特定路由)设置授权代替控制器操作,可以调用应保护的控制器并跳过授权。这在webforms中不是问题,因为页面是一个页面(而不是方法调用),但MVC中页面/路径和代码之间的分离使得这成为一个巨大的安全漏洞。正如已经建议的,您可以在web.config中使用
元素。否则,,您可以为每个区域使用一个基本控制器类,并用进行修饰,以便对从中继承的所有控制器进行筛选。在MVC应用程序中,唯一安全的方法是按照David的建议进行操作-指定一个基本控制器的属性,并使该基本控制器所在的区域子类中的所有控制器都被筛选出来控制器
在MVC中使用标签进行授权将打开应用程序中的安全漏洞。您对保护URL或路由不感兴趣。您希望保护控制器本身,因为它们是您试图保护的实际资源。因此,保护装置需要直接安装在控制器上
此外,请记住,区域实际上只是对路线进行分组的一种奇特方式,而不是控制器。尝试使用奇特的逻辑来检测当前区域并推断授权设置也会在应用程序中打开安全漏洞。建议使用MVC2的旧方法。一点也不表明你是错的。这里有一个链接,指向使用全局过滤器的MVC3的新的和改进的技术。欢迎您,这是一个相当不错的赞美,因为我只是在周二才开始尝试学习MVC3。:)不要使用web.config方法来保护MVC应用程序,请参阅由于其他答案明确指出您不应该这样做而导致的否决投票…以及您不应该这样做的原因。