页面加载权限

本文关键字:权限 加载 | 更新日期: 2023-09-27 18:11:10

我是一个关于Asp使用的新手。. NET成员功能,我想知道它是否可能是一个很好的做法,拒绝访问整个页面使用这样的代码:

public partial class AdminPage : Page
{
   [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
   protected void Page_Load(object sender, EventArgs e)
   {
      ...
   }
}

我怀疑这不是一个好的做事方式,但我想知道为什么!

谢谢。

页面加载权限

小点——把属性放在类上。这将导致页面在没有适当权限的情况下导航到该页时立即引发安全异常。要阻止用户查看此页面,请在显示URL之前检查他们的凭据。类上的属性有力地保证了普通用户不会在该类中运行哪怕一行代码。

是的,这是一个很好的技术,原因如下:

该属性在线程原则和HttpContext User对象被设置时起作用,并使用合适的IPrincipal和IIdentity。(所有这些都将在全局asax的请求身份验证事件中发生)这些接口是由Microsoft定义的,有很好的文档记录,可以在任何上下文中使用,可以在MS操作系统上运行的任何应用程序中使用。所以你从大街上找来的任何一个半称职的开发人员在开始阅读你的代码之前都应该熟悉这个。

而且,由于Thread的IPrincipal和IIdentity是由微软使用的(它可能是任何拥有大量用户基础的大公司),因此它是经过战斗测试的代码。你仍然可以做一些愚蠢的事情,但现有的模式是帮助你掉进成功的陷阱的。

另一方面,如果你把一个自定义对象放入Session,一个神奇的cookie或一些其他令牌,那么维护开发人员将不得不从头开始学习它是如何工作的,然后检查它,看看是否有可利用的漏洞。

我认为你需要为你所有的页面设置一个基类,例如:

public abstract class BasePage : Page
{
    // Note:
    // 1. check on init, not on load
    // 2. override protected method, not handle event
    protected override OnInit(EventArgs e)
    {
        // check permissions here
    }
}