3

セッションオブジェクトを介してユーザーを確認するためにマスターページのINITイベントに依存する非常に基本的なasp.netアプリケーションがあります。はい、私はこれが最適ではないことを知っています。

ELMAH を追加したいのですが、フォーム認証と web.config の許可/拒否設定を使用せずにコンソールを保護するための参照が見つかりません。

フォーム認証に依存しない elmah.axd ファイルを保護する別の方法はありますか?

4

3 に答える 3

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 イベントでセッションにアクセスできなくなります。

于 2010-03-19T18:23:47.507 に答える
1

私は ELMAH の MySQL サポートの開発者の 1 人です。許可/拒否オプションは 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 フォームではなく、このカスタム オブジェクトに対して実行されます。

于 2010-03-19T18:33:10.633 に答える
0

箱から出して、リモートアクセスは無効になっているため、ローカルマシンからのみエラーログにアクセスできます。詳細はこちら: http ://code.google.com/p/elmah/wiki/SecuringErrorLogPages

于 2009-05-06T08:16:33.653 に答える