2012-05-10 10 views
1

私は、.NET MVC、基本的な要件を持つコントローラ/アクションしようとした不正アクセスをログに記録するための最良の方法を確立しようとしているが、次のとおりです。ロギング/監査403の要求

  1. 彼らはログインしていない場合
  2. ログインしているがページに正しい資格情報がない場合は、リクエストに関する情報、誰が誰か、HttpRequestのものなどをログに記録してリダイレクトする必要があります特定の不正アクセスページに移動します。

1は、明らかに.net mvc [Authorize]属性フィルタで処理されます。私は部分的に実装しました。私は、いくつかの余分なものをチェックし、レスポンスコード403でHttpResultを返すために、デフォルトのHandleUnauthorizedRequestメソッドをオーバーライドするAuthorizeアクションフィルタを拡張する特定のAuthorization属性を作成しました。

私は他の部分を実装する際に問題が発生した場合は、情報をデータベースに記録してください。もちろん、カスタム属性自体からログを記録するという単純な解決策がありますが、それは正しいとは感じません。私は属性自体をよりスマートにしているように感じています。データベースへの情報のロギングではなく、アクセスの制限について説明します。

もう1つの解決策は、権限が与えられていないページに到達したときにログに記録する方法です。このページ自体は悪くはないものの、まったく正しいとは感じられません。

個人的には、リクエストチェーン内のどこかで処理できるようにしたいと思いますが、すべての適切な情報にアクセスできる場所がないことがわかります。私はここで見てみましたが、私たちが行っている解決策にはまったく適合しないものは見つかりませんでした。

私たちがしようとしているものに似たものを実装している人がいますか、これをどこに実装するべきかについてのアイディアがあります。

答えて

2

...新しいのIHttpModuleを作成して、EndRequestのイベントでの不正行為のハッカーを記録

例えば

おかげで、 MD

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 
     } 
    } 
} 
+0

これは、私たちが探していたものです。 – MDo