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

发布于 2024-07-15 04:13:07 字数 198 浏览 7 评论 0原文

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

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

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

I have a very basic asp.net application that relies on a master page's INIT event to verify the user via a session object. Yes, I know this is way-suboptimal.

I'd like to add ELMAH to it, but can't find any references to securing the console without using forms authentication and a web.config allow/deny setting.

Is there another way to secure the elmah.axd file that doesn't rely on forms authentication?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

空城旧梦 2024-07-22 04:13:07

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

This article describes how to wrap the Elmah error handler in another event handler that allows access to session state:

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

In Global.asax, you could then have something like the following:

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");
}

The standard Elmah handler doesn't implement IRequiresSessionState or IReadOnlySessionState, so you'll have to create another event handler to wrap this, as described in the link mentioned above. Otherwise, you won't be able to access the session in the Application_PreRequestHandlerExecute event.

明媚殇 2024-07-22 04:13:07

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

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

    private void Request_Authenticate(对象发送者,EventArgs e){ 
          // 进行检查并创建 IPrincipal 对象 
          IPrincipal 用户 = new MyPrincipal(...); 
          上下文.User = 用户; 
      } 
      
  4. 然后,当为您的 elmah.axd 处理程序检查角色时,它将违背此自定义对象而不是 Web 表单。

I am one of the developers for ELMAH's MySQL support. The allow/deny options are not web form specific. They can work with any provider.

  1. To impliment a custom one you would need to use the IPrincipal interface.
  2. The roles from allow/deny roles are pulled from this IsInRole method of IPrincipal.
  3. On the Request_Authentication in your global.asax or your own IHttpHandler you would need to create and set the IPrincipal object to the Context.User object. Something like this:

    private void Request_Authenticate (object sender, EventArgs e) {
        // do checks and create IPrincipal object
        IPrincipal user = new MyPrincipal(...);
        Context.User = user;
    }
    
  4. Then when the roles are checked for your elmah.axd handler it would go against this custom object instead of the web forms.

原野 2024-07-22 04:13:07

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

Out of the box, remote access is disabled so you can only access the error logs from the local machine. There's more here:
http://code.google.com/p/elmah/wiki/SecuringErrorLogPages

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文