Закрепление Elmah внутри ASP.NET сайт
У меня возникли проблемы, пытаясь обеспечить ELMAH. Я последовал за Филом Хааком учебник, С той лишь разницей, что демо-проект-это веб-приложение, а мой проект-это веб-сайт.
<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.источников.
например без символа "/"
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 - ресурс не может быть найден. (именно то, что мы хотели)
4 ответа:
Я играл с сетью.config и получил следующее Для работы. В основном вместо того, чтобы elmah.axd HttpHandler в общей системе.web, добавьте его специально в систему.веб вашего местоположения пути "администратора".
<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>
Если вы используете ASP.NET MVC, вам нужно, чтобы механизм маршрутизации игнорировал этот путь. Если вы хотите переместить elmah в /admin / elmah.например, axd вы должны добавить следующее В Global.асакс.cs:
routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");
потратив некоторое время, пытаясь заставить это работать, исправляя различные советы из каждого ответа, я собрал полное решение, которое должно работать для всех вкусов IIS.
вот что должно быть в каждой из ваших веб-сайтов.разделы конфигурации:
<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, добавить
routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");
в вашем методе RegisterRoutes.
в IIS 7.5 windows server 2008 есть еще один раздел под названием system.web-сервер. Для того, чтобы Эльма работала, это должно было быть добавлено:
<system.webServer> <handlers> <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> </handlers> </system.webServer>
Я пробовал несколько вариантов, но я не могу использовать вышеуказанное решение для предотвращения '/бла / Эльма.загрузка с работы.
любые предложения по созданию вышеуказанного решения для IIS 7.x?
спасибо.