在不使用表单身份验证的asp.net应用程序中保护ELMAH

时间:2009-03-24 22:45:01

标签: asp.net logging elmah

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

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

是否有其他方法可以保护不依赖表单身份验证的elmah.axd文件?

3 个答案:

答案 0 :(得分:3)

本文介绍如何将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事件中的会话。

答案 1 :(得分:1)

我是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表单。

答案 2 :(得分:0)

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