在ASP.NET网站保护ELMAH
-
12-09-2019 - |
题
我有麻烦试图保护ELMAH。我跟随菲尔Haacked的的教程,唯一的区别是示范项目是一个Web应用程序,我的项目是一个网站。
<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>
凭借领先的“/”我收到的响应“的资源不能被发现。”,除了认证可以通过在/管理之前附加目录名被忽略,如果我删除前导“/”一切工作正常/ 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 - 资源无法找到。 (正是我们想要的)
解决方案
我在web.config发挥各地,并得到了以下工作。基本上代替把elmah.axd的HttpHandler在一般的System.Web,在你的“管理员”的路径位置的对System.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.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}");
在你的RegisterRoutes方法。
在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的任何建议?
感谢。