【问题标题】:Authorize attribute vs authorization node in web.config在 web.config 中授权属性与授权节点
【发布时间】:2011-09-28 03:12:33
【问题描述】:

我知道我可以使用 web.config 中的授权标签来限制对 ASP.NET MVC 3 应用程序的访问

授权>

或使用 [Authorize()] 属性(甚至使用自定义 Authorize 属性)装饰控制器基类

[AdminOnly]
public class BaseController : Controller{}

问题是:它们是替代方法和等效方法吗?我应该总是使用一种方法而不是另一种吗?我应该记住哪些要素?

【问题讨论】:

    标签: asp.net security asp.net-mvc-3


    【解决方案1】:

    我知道我可以使用 web.config 中的授权标签来限制对 ASP.NET MVC 3 应用程序的访问

    不,不要在 ASP.NET MVC 中使用它。

    问题是:它们是替代方法和等效方法吗?

    不,它们不是替代品。您不应在 ASP.NET MVC 应用程序的 web.config 中使用 <authorization> 标记,因为它基于路径,而 MVC 与控制器操作和路由一起使用。在 ASP.NET MVC 中进行授权的正确方法是使用 [Authorize] 属性。

    【讨论】:

    • 合理。请让我更好地理解:如果我不打算使用任何 标签,(即限制对整个应用程序的访问)为什么以及如何在 web.config 中定义授权可能是一个安全漏洞?跨度>
    • @Arialdo Martini,在位置标签中指定路径:例如,您可以限制对/admin 的访问。但是在 MVC 中你有路由。这些路由在 Global.asax 中定义。它们反映了控制器和操作。因此,应该保护的是您的控制器和操作,而不是一些不存在的虚拟路径。
    • 是的,很清楚。如果我不会使用任何位置标签,而我只是为整个应用程序设置授权怎么办?我的意思是,如果我完全使用问题中报告的 web.config,它不报告任何 url 或任何路由怎么办?这是否代表安全漏洞?
    • @Arialdo Martini,如果您想为整个应用程序设置授权,您可以使用全局操作过滤器。这确实是推荐的方式。
    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 2023-03-25
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多