Как обезопасить Elmah.axd? - PullRequest
       40

Как обезопасить Elmah.axd?

47 голосов
/ 11 декабря 2010

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

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

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

Ответы [ 7 ]

42 голосов
/ 11 декабря 2010

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

Вот что я бы порекомендовал вам:

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

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

21 голосов
/ 05 марта 2011

Я считаю, что это наиболее приемлемо для приложений MVC:

http://www.beletsky.net/2011/03/integrating-elmah-to-aspnet-mvc-in.html

16 голосов
/ 11 декабря 2010

Вы можете указать обработчику elmah http на другой 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.

9 голосов
/ 25 августа 2011

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

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

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

3 голосов
/ 22 июля 2014

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

3 голосов
/ 11 декабря 2010
2 голосов
/ 03 декабря 2014

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

...