【问题标题】:Secure ELMAH in asp.net application that doesn't use forms authentication在不使用表单身份验证的 asp.net 应用程序中保护 ELMAH
【发布时间】:2009-03-24 22:45:01
【问题描述】:

我有一个非常基本的 asp.net 应用程序,它依赖于母版页的 INIT 事件来通过会话对象验证用户。是的,我知道这是次优的。

我想将 ELMAH 添加到其中,但在不使用表单身份验证和 web.config 允许/拒绝设置的情况下找不到任何保护控制台的参考。

是否有另一种方法来保护不依赖表单身份验证的 elmah.axd 文件?

【问题讨论】:

    标签: asp.net logging elmah


    【解决方案1】:

    本文描述了如何将 Elmah 错误处理程序包装在另一个允许访问会话状态的事件处理程序中:

    http://groups.google.com/group/elmah/msg/a0aa776d348ba97e

    在 Global.asax 中,您可以有如下内容:

    protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
    {
        // Get the filename being requested
        string filename = Path.GetFileName(Request.Path).ToLower();
    
        // Verify that a user is logged in by checking the session
        bool isValid = (HttpContext.Current.Session["User"] != null);
    
        // Throw error if invalid
        if (filename == "elmah.axd" && !isValid)
            throw new SecurityException("Access to elmah.axd is denied");
    }
    

    标准 Elmah 处理程序没有实现 IRequiresSessionState 或 IReadOnlySessionState,因此您必须创建另一个事件处理程序来包装它,如上面提到的链接中所述。否则,您将无法在 Application_PreRequestHandlerExecute 事件中访问会话。

    【讨论】:

      【解决方案2】:

      我是 ELMAH 的 MySQL 支持开发人员之一。允许/拒绝选项不是特定于 Web 表单的。他们可以与任何提供商合作。

      1. 要实现自定义,您需要使用IPrincipal 接口。
      2. 来自允许/拒绝角色的角色是从 IPrincipal 的 IsInRole 方法中提取的。
      3. 在 global.asax 或您自己的 IHttpHandler 中的 Request_Authentication 上,您需要创建 IPrincipal 对象并将其设置为 Context.User 对象。像这样的:

        private void Request_Authenticate (object sender, EventArgs e) {
            // do checks and create IPrincipal object
            IPrincipal user = new MyPrincipal(...);
            Context.User = user;
        }
        
      4. 然后,当为您的 elmah.axd 处理程序检查角色时,它将针对此自定义对象而不是 Web 表单。

      【讨论】:

        【解决方案3】:

        开箱即用,远程访问被禁用,因此您只能从本地计算机访问错误日志。这里还有更多: http://code.google.com/p/elmah/wiki/SecuringErrorLogPages

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-03
          • 2018-09-11
          • 2014-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多