2009-08-07 2 views
57

У меня возникли проблемы с попыткой защитить ELMAH. Я следил за Фил Хаакэдом tutorial, с той лишь разницей, что демонстрационный проект - это веб-приложение, а мой проект - это веб-сайт.Защита Elmah на веб-сайте ASP.NET

<add verb="POST,GET,HEAD" path="/admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 

    <location path="admin"> 
     <system.web> 
      <authorization> 
       <deny users="?"/> 
      </authorization> 
     </system.web> 
    </location> 

С ведущим «/» Я получаю ответ, что «Ресурс не может быть найден.», Если я удалю ведущее «/» все работает отлично, за исключением аутентификации может быть обойдена путем добавления имени каталога перед /admin/elmah.axd.

Например, без ведущего "/"

www.mysite.com/admin/elmah.axd - триггеры аутентификации
www.mysite.com/asdasdasd/admin/elmah.axd - не срабатывает аутентификация и отображение ELMAH

Как я могу обеспечить безопасность ELMAH при сохранении возможности удаленного просмотра журнала?

Спасибо.

Примечание для других:
Ниже приведен ответ Алана ниже.

www.mysite.com/admin/elmah.axd - запускает аутентификации
www.mysite.com/admin/asdasdasd/elmah.axd - запускает на проверку подлинности
www.mysite.com/asdasdasd/admin/ elmah.axd - Ресурс не найден. (именно то, что мы хотели)

ответ

70

Я играл с web.config и получил следующее, чтобы работать. В основном вместо того, чтобы поместить файл elmah.axd HttpHandler в общий файл system.web, добавьте его конкретно в system.web вашего местоположения пути «admin».

<location path="admin"> 
    <system.web> 
     <httpHandlers> 
      <add verb="POST,GET,HEAD" path="elmah.axd" 
       type="Elmah.ErrorLogPageFactory, Elmah" /> 
     </httpHandlers> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</location> 
+8

Если вы используете asp.net mvc, не забудьте добавить: routes.IgnoreRoute ("admin/elmah.axd/{* pathInfo}"); – santiagoIT

+0

Вопросы о безопасности и *** ELMAH ***: http://geeks.ms/lruiz/2014/07/21/asp-net-revisa-la-configuracin-de-elmah-en-produccin/ –

1

В сервере Windows Server 2008 IIS 7.5 есть еще один раздел под названием system.webServer. Для того, чтобы ELMAH работать, это должно было быть добавлено:

<system.webServer> 
    <handlers> 
    <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
    </handlers> 
</system.webServer> 

Я попробовал несколько отклонений, но я не могу использовать выше раствор для профилактики «/blah/elmah.axd» из за работой.

Любые предложения по решению вышеуказанного решения для IIS 7.x?

Спасибо.

+0

Как только я удалил elmah.axd из моего раздела httpHandlers system.web и из обработчиков в system.webserver, теперь я получаю ошибку 404. У меня есть путь к местоположению = "admin" точно так же, как предложил Алан. Выполнение IIS 7.5. – InvisibleMan1002

+0

@ Дан Аткинсон, это неточное утверждение. Если вы размещаете в IIS 7+, вы должны зарегистрировать HttpHandlers и HttpModules в разделе конфигурации 'system.webServer'. –

+0

@ChrisMarisic: Знаешь, ты абсолютно прав! Я убрал (удалил) свое предыдущее заявление. Спасибо, что исправил меня. :) –

25

Если вы используете ASP.NET MVC, вам понадобится, чтобы механизм маршрутизации игнорировал этот путь. Если вы хотите переместить ELMAH к /admin/elmah.axd, например, вы должны добавить следующее Global.asax.cs:

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}"); 
+0

Это решило мою проблему на MVC, но, я думаю, исходный вопрос касался не ASP.NET MVC. – pauloya

+0

+1 для указания конкретного исправления MVC. Работал для меня в MVC3. Без этого @ ответ Алана не будет работать в MVC. – N30

+0

@Paulo, вопрос не указывает Webforms или MVC. ASP.NET является основой для обоих, поэтому включил этот дополнительный бит, который вам понадобится для MVC. – aarondcoleman

17

Потратив некоторое время, пытаясь получить эту работу, исправляя вместе различные биты из рекомендаций каждого из ответов, я собрал полное решение, которое должно работать для всех вариантов IIS.

Вот что должно быть в каждом из ваших разделов web.config:

<configuration> 
    <configSections> 
    <sectionGroup name="elmah"> 
     <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" /> 
     <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" /> 
     <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" /> 
     <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" /> 
    </sectionGroup> 
    </configSections> 

    <elmah> 
    <!-- set allowRemoteAccess="0" for extra security --> 
    <security allowRemoteAccess="1"/> 
    </elmah> 

    <system.web> 
    <httpModules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
     <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
    </httpModules> 
    </system.web> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" /> 
     <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" /> 
    </modules> 
    </system.webServer> 

    <location path="admin"> 
    <system.web> 
     <authorization> 
     <!--<allow users="Admin" /> --> 
     <deny users="?" /> 
     </authorization> 
     <httpHandlers> 
     <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
     </httpHandlers> 
    </system.web> 
    <system.webServer> 
     <handlers> 
     <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" /> 
     </handlers> 
    </system.webServer> 
    </location> 

</configuration> 

И если вы используете Asp.Net MVC, add

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}"); 

в вашем методе RegisterRoutes.

Смежные вопросы