如何保护Elmah.axd?

时间:2010-12-11 10:40:16

标签: asp.net-mvc security iis-6 elmah

我们正在将Elmah用作即将投入生产的应用程序的错误记录系统。它非常有用,但如果它像这样投入生产,世界上的任何人都会访问错误日志,因为他们所要做的就是访问ourdomain.com/elmah.axd

这显然不太理想。我原本打算将访问该页面仅限于我们公司内的IP地址,但现在我们的SysAdmins说这是不可能的。所以我在这里问如何阻止访问此资源?

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

7 个答案:

答案 0 :(得分:42)

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

以下是我推荐你的内容:

  1. 完全禁用主站点上的elmah.axd处理程序
  2. 配置elmah将日志写入某个共享数据源(如共享文件,SQLite数据库甚至SQL Server)
  3. 在IIS中配置第二个站点,可能在另一个网络或服务器上,该网站或服务器仅安装了elmah,并指向同一个共享数据源。现在,您将始终使用第二个站点来读取日志。显然,第二个网站只能供您访问。
  4. 如果您决定使用SQL Server,您甚至可以从只能访问的单个内部应用程序中读取服务器场中多个Web服务器上运行的多个应用程序的日志。

答案 1 :(得分:21)

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

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

答案 2 :(得分:16)

您可以将elmah http处理程序指向web.config中的另一个URL(例如“Secure / elmah.axd”)。您可以像在网络配置中的任何其他asp.net页面一样保护网址。

<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。

答案 3 :(得分:9)

如果您正在使用ASP.NET成员资格,则很容易为匿名用户限制对elmah.axd HttpHandler的访问,并且只允许在“Administrators”组中登录用户。我这样做了:

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

任何已登录并且“管理员”角色成员的人都可以立即访问该页面。

答案 4 :(得分:3)

答案 5 :(得分:3)

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

答案 6 :(得分:2)

我使用了IIS 7配置中的IP限制。默认情况下,您无法在<location path="elmah.axd">中将其应用,因为它已锁定在父配置级别上。因此,我创建了一个空文件夹"logs"并在IIS中对此文件夹应用了限制,然后修改了elmah.axd文件的位置路径。那就是它!您可以远程访问yourdomain.com/logs/elmah.axd,但只能访问特定的IP。