1

.netmvcを使用してコントローラー/アクションへの不正アクセスの試みをログに記録するための最良の方法を確立しようとしています。基本的に要件は次のとおりです。

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

1は、デフォルトで.netmvc[Authorize]属性フィルターを使用して処理されることは明らかです。2部分的に実装しました。デフォルトのHandleUnauthorizedRequestメソッドをオーバーライドしていくつかの追加事項をチェックし、応答コード403でHttpResultを返すAuthorizeアクションフィルターを拡張する特定のAuthorization属性を作成しました。

そのほかの部分、つまり情報をデータベースに記録するのに問題があります。もちろん、カスタム属性自体の内部からログを記録するという簡単な解決策はありますが、それは正しくありません。属性自体をよりスマートにしているように感じます。結局のところ、それは知っているはずです。データベースへの情報の記録ではなく、アクセスの制限について。

許可されていないページ自体に到達したときにログに記録するという別の解決策もあります。これはそれほど悪くはありませんが、それでもまったく正しく感じられません。

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

誰かが私たちが目指しているものと同様の何かを実装したか、またはこれをどこに実装すべきかについて何かアイデアを持っていますか?

ありがとう、MD

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 に答える