Безопасный ELMAH в приложении asp.net, которое не использует аутентификацию форм - PullRequest
3 голосов
/ 25 марта 2009

У меня есть очень простое приложение asp.net, которое использует событие INIT главной страницы для проверки пользователя через объект сеанса. Да, я знаю, что это не совсем оптимально.

Я бы хотел добавить в него ELMAH, но не могу найти никаких ссылок на защиту консоли без использования проверки подлинности с помощью форм и настройки разрешения / отказа web.config.

Есть ли другой способ защитить файл elmah.axd, который не использует проверку подлинности с помощью форм?

Ответы [ 3 ]

3 голосов
/ 19 марта 2010

В этой статье описывается, как обернуть обработчик ошибок 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.

1 голос
/ 19 марта 2010

Я один из разработчиков поддержки ELMAH MySQL. Варианты разрешения / запрета не зависят от веб-формы. Они могут работать с любым провайдером.

  1. Для реализации пользовательского интерфейса вам необходимо использовать интерфейс IPrincipal .
  2. Роли из разрешенных / запрещенных ролей извлекаются из этого IsInRole метода IPrincipal.
  3. В Request_Authentication в вашем global.asax или в вашем собственном IHttpHandler вам потребуется создать и установить объект 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, он будет работать против этого пользовательского объекта вместо веб-форм.

0 голосов
/ 06 мая 2009

Из коробки удаленный доступ отключен, поэтому вы можете получить доступ только к журналам ошибок с локального компьютера. Там больше здесь: http://code.google.com/p/elmah/wiki/SecuringErrorLogPages

...