在ASP.NET网站中保护Elmah

我无法保证ELMAH安全。 我跟随了Phil 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> 

如果我删除前面的“/”,那么前面的“/”会收到“无法find资源”的回复,除非通过在/admin/elmah.axd前面添加目录名称来绕过validation,否则一切正常。 。

例如没有领先的“/”

www.mysite.com/admin/elmah.axd – 触发authentication
www.mysite.com/asdasdasd/admin/elmah.axd – 不会触发authentication并显示ELMAH

如何确保ELMAH的安全性,同时保持远程查看日志的能力?

谢谢。

注意别人:
以下Alan的回答结果如下。

www.mysite.com/admin/elmah.axd – 触发authentication
www.mysite.com/admin/asdasdasd/elmah.axd – 触发authentication
www.mysite.com/asdasdasd/admin/elmah.axd – 找不到资源。 (正是我们想要的)

我玩了web.config,并得到以下工作。 基本上,而不是将elmah.axd HttpHandler放在一般的system.web中,特别是在你的“admin”path位置的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,则需要让路由引擎忽略该path。 如果您想将elmah移动到/admin/elmah.axd中,则应将以下内容添加到Global.asax.cs中:

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

花了一段时间,试图通过将每个答案的各种build议修补到一起来工作,我已经整合了一个完整的解决scheme,适用于所有types的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> 

我尝试了一些差异,但我无法使用上述解决scheme来防止“/blah/elmah.axd”工作。

有关使上述解决scheme适用于IIS 7.x的任何build议?

谢谢。