1

我正在尝试建立使用 .net mvc 记录对控制器/操作的未授权访问尝试的最佳方法,基本上要求是:

  1. 如果他们没有登录,那么我们想将他们重定向到登录页面
  2. 如果他们已登录但没有页面的正确凭据,那么我们想要记录有关请求的信息、他们是谁、一些 HttpRequest 内容等,然后将它们重定向到特定的未经授权的访问页面。

1 显然是默认使用 .net mvc [Authorize] 属性过滤器处理的。2 我已经部分实现,我创建了一个特定的 Authorization 属性,它扩展了 Authorize 操作过滤器,该过滤器覆盖了默认的 HandleUnauthorizedRequest 方法来检查一些额外的东西并返回一个带有响应代码 403 的 HttpResult。

我无法实现另一部分,将信息记录到数据库中。当然有从自定义属性本身记录它的简单解决方案,但这感觉不对,感觉就像我正在让属性本身变得更聪明,然后它应该是,在一天结束时它应该知道关于限制访问,而不是关于将信息记录到数据库。

当它到达未经授权的页面本身时,还有另一种记录它的解决方案,它感觉不那么糟糕,但仍然感觉不太正确。

就我个人而言,我希望能够在请求链中的某个地方处理它,但据我所知,没有地方可以访问所有正确的信息。我试过在这里四处寻找,但没有找到任何非常适合我们想要的解决方案的东西。

有没有人实现了与我们的目标类似的东西,或者对应该在哪里实现它有任何想法。

谢谢,医学博士

4

1 回答 1

2

创建一个新的 IHttpModule 并将作弊黑客记录在 EndRequest 事件中......

例如

public class UnAuthorizedLoggerHttpModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.EndRequest += ContextOnEndRequest;
    }

    private void ContextOnEndRequest(object sender, EventArgs eventArgs)
    {
        var app = sender as HttpApplication;

        if (app == null) return;

        if (app.Response.StatusCode == (int)HttpStatusCode.Forbidden)
        {
            //Log the error
            //All the user info should be in app.Request
        }
    }
}
于 2012-05-11T00:05:50.477 回答