如何保护Elmah.axd?

我们正在使用Elmah作为我们的错误日志logging系统,用于即将投入生产的应用程序。 这非常有用,但是如果像这样进入生产环境,任何人都可以访问错误日志,因为他们只需要访问ourdomain.com/elmah.axd

这显然不理想。 我原本打算限制只能访问我们公司内部的IP地址,但现在我们的系统pipe理员说这是不可能的。 所以我在这里问如何防止访问这个资源?

我们在IIS 6上运行ASP.NET MVC应用程序。

确保elmah.axd的典型scheme是只允许一些经过身份validation的用户能够访问它。 但是,如果您的网站根本不使用任何身份validation,则可能不适用。

这是我会推荐你​​的:

  1. 完全禁用主站点上的elmah.axd处理程序
  2. configurationelmah将日志写入某个共享数据源(如共享文件,SQLite数据库甚至SQL Server)
  3. 在IIS中configuration第二个站点,可能在另一个networking或服务器上,它只安装了elmah,并且指向同一个共享数据源。 现在,您将始终使用第二个站点来读取日志。 显然,第二个网站只能由您访问。

如果您决定使用SQL Server,甚至可以从一个只能由您访问的内部应用程序中读取在服务器场中的多个Web服务器上运行的多个应用程序的日志。

我发现这是MVC应用程序最可接受的:

http://www.beletsky.net/2011/03/integrating-elmah-to-aspnet-mvc-in.html

您可以将elmah http处理程序指向web.config中的另一个url(例如“Secure / elmah.axd”)。 您可以保护url为任何其他的网页configuration的网页。

 <httpHandlers> ... <add verb="POST,GET,HEAD" path="/Secure/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> </httpHandlers> <location path="Secure" > <!-- secure the host.com/Secure path --> <system.web> <authorization> <deny users="?" /> <!-- Or anything else... --> </authorization> </system.web> </location> 

我们正在使用活动目录成员资格提供程序在IIS7上成功使用这种方法,而且效果很好。 我不知道它是否在IIS6上工作。

如果您使用的是ASP.NET Membership,那么限制对匿名用户的elmah.axd HttpHandler的访问权限,并且只允许“Administrators”组中的login用户访问。 我已经这样做了:

 <configuration> ... <location path="elmah.axd"> <system.web> <authorization> <allow roles="Administrators"/> <deny users="*"/> </authorization> </system.web> </location> </configuration> 

任何login成员和“pipe理员”angular色的成员都可以访问该页面。

这里有一些有用的链接:

安全地实现ELMAH即插即用错误logging
保护错误日志页面

如果您的意图是禁用远程用户访问它,只需将<security allowRemoteAccess="yes" />的值更改为<security allowRemoteAccess="no" />

我使用了IIS 7configuration中的IP限制。 默认情况下,你不能简单地将它应用在<location path="elmah.axd">因为它被locking在父configuration级别上。 因此,我创build了一个空文件夹"logs"并在IIS中将限制应用于此文件夹,然后修改了elmah.axd文件的位置path。 而已! 您可以远程访问yourdomain.com/logs/elmah.axd ,但只能从特定的IP访问。