如何保护Elmah.axd?

Dav*_*Dev 47 security asp.net-mvc iis-6 elmah

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

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

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

Dar*_*rov 43

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

这是我建议你的:

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

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

  • 这实际上是非常好的建议..但是设置需要时间.知道如何在不部署第二站点等的情况下进行限制会很棒. (3认同)
  • @Darin,你怎么禁用访问elmah.axd?谢谢 (3认同)
  • 我有一个单独的管理应用程序,都使用相同的数据源但是当我为每个站点访问elmah.axd时,它只显示该站点上发生的错误 - 任何想法? (3认同)
  • 我们如何配置elmah从多个应用程序中读取日志? (2认同)

Ale*_*sky 21

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

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

  • 顺便说一句,有一个NuGet包!http://nuget.org/List/Packages/Elmah.MVC (3认同)

m0s*_*0sa 16

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

<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>
Run Code Online (Sandbox Code Playgroud)

我们使用活动目录成员资格提供程序在IIS7上成功使用此方法,并且它运行良好.我不确定它是否适用于IIS6.


Jak*_*ade 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>
Run Code Online (Sandbox Code Playgroud)

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