Подтвердить что ты не робот

Как защитить Elmah.axd?

Мы используем Elmah как нашу систему регистрации ошибок для приложения, которое скоро поступит в производство. Это очень полезно, но если он выходит на производство, как и любой другой человек в мире, доступ к журналу ошибок, потому что все, что им нужно сделать, это посетить ourdomain.com/elmah.axd.

Это, очевидно, не идеально. Первоначально я планировал ограничить доступ к этой странице только IP-адресам в нашей компании, но теперь наши SysAdmins говорят, что это невозможно. Итак, я спрашиваю, как я могу предотвратить доступ к этому ресурсу?

Мы запускаем приложение ASP.NET MVC на IIS 6.

4b9b3361

Ответ 1

Типичный сценарий защиты elmah.axd позволяет доступ только к определенному пользователю с аутентификацией. Но если ваш сайт вообще не использует аутентификацию, это может быть неприменимо.

Вот что я вам порекомендую:

  • полностью отключить обработчик elmah.axd на вашем основном сайте
  • Настроить elmah для записи журналов в один общий источник данных (например, общий файл, база данных SQLite или даже SQL Server).
  • Настройте второй сайт в IIS, возможно, на другой сети или сервере, на котором установлен только elmah и указывает на тот же общий источник данных. Теперь вы всегда будете использовать второй сайт для чтения журналов. Очевидно, что второй сайт будет доступен только вам.

Если вы решите использовать SQL Server, вы даже можете прочитать журналы нескольких приложений, работающих на нескольких веб-серверах в ферме, из одного внутреннего приложения, доступного только вам.

Ответ 3

Вы можете указать обработчик http elmah на другой URL (например, "Secure/elmah.axd" ) в web.config. Вы можете защитить URL как любую другую страницу asp.net в веб-конфигурации.

<httpHandlers>
  ...
  <add verb="POST,GET,HEAD" path="/Secure/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<location path="Secure" > <!-- secure the host.com/Secure path -->
  <system.web>
    <authorization>
      <deny users="?" />
      <!-- Or anything else... -->
    </authorization>
  </system.web>
</location>

Мы успешно используем этот подход в IIS7 с использованием активных поставщиков членства в каталогах, и он отлично работает. Я не уверен, работает ли он на IIS6.

Ответ 4

Если вы используете членство в ASP.NET, довольно легко ограничить доступ к elmah.axd HttpHandler для анонимных пользователей и разрешить вход в систему только пользователям в группе "Администраторы". Я сделал это вот так:

<configuration>
  ...
  <location path="elmah.axd">
    <system.web>
      <authorization>
        <allow roles="Administrators"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

Любой, кто вошел в систему и член роли "Администраторы", может получить доступ к этой странице сейчас.

Ответ 6

Если вы намерены отключить удаленные пользователи от доступа к нему, просто измените значение <security allowRemoteAccess="yes" /> на <security allowRemoteAccess="no" />

Ответ 7

Я использовал IP-ограничения из конфигурации IIS 7. По умолчанию вы не можете просто применить его в <location path="elmah.axd">, потому что он заблокирован на уровне родительской конфигурации. Таким образом, я создал пустую папку "logs" и применил ограничения в IIS к этой папке, а затем изменил путь местоположения для файла elmah.axd. Это! У вас есть удаленный доступ к yourdomain.com/logs/elmah.axd, но только от определенных IP-адресов.