ASP.NET 웹 사이트에서 Elmah 보안
-
12-09-2019 - |
문제
나는 Elmah를 확보하는 데 어려움을 겪고 있습니다. 나는 Phil Haacked 's를 따랐다 지도 시간, 데모 프로젝트 인 유일한 차이점은 웹 응용 프로그램이고 내 프로젝트는 웹 사이트입니다.
<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>
선두 "/"나는 "자원을 찾을 수 없다는 응답을받습니다." .
예를 들어 선행 "/"
www.mysite.com/admin/elmah.axd- 인증을 트리거합니다
www.mysite.com/asdasdasd/admin/elmah.axd- 인증을 트리거하지 않고 Elmah를 표시합니다.
로그를 원격으로 볼 수있는 능력을 유지하면서 Elmah가 안전하다는 것을 어떻게 보장 할 수 있습니까?
감사.
다른 사람에 대한 참고 :
아래의 Alan의 답변에 따라 다음은 다음과 같습니다.
www.mysite.com/admin/elmah.axd- 인증을 트리거합니다
www.mysite.com/admin/asdasdasd/elmah.axd- 인증을 트리거합니다
www.mysite.com/asdasdasd/admin/elmah.axd- 자료를 찾을 수 없습니다. (정확히 우리가 원했던 것)
해결책
나는 web.config와 함께 놀았고 다음과 같은 일을했다. 기본적으로 Elmah.axd httphandler를 일반 시스템에 넣는 대신 "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>
다른 팁
ASP.NET MVC를 사용하는 경우 라우팅 엔진이 해당 경로를 무시해야합니다. Elmah를 /admin/elmah.axd로 옮기려면 Global.asax.cs에 다음을 추가해야합니다.
routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");
각 답변의 다양한 조언을 모아서 이것을 작동시키는 데 잠시 시간을 보냈으며, 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를 사용하는 경우 추가하십시오
routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");
레지스터 구역에서.
IIS 7.5 Windows Server 2008에는 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의 작동에 대한 제안이 있습니까?
감사.