我们正在将Elmah用作即将投入生产的应用程序的错误记录系统。它非常有用,但如果它像这样投入生产,世界上的任何人都会访问错误日志,因为他们所要做的就是访问ourdomain.com/elmah.axd
。
这显然不太理想。我原本打算将访问该页面仅限于我们公司内的IP地址,但现在我们的SysAdmins说这是不可能的。所以我在这里问如何阻止访问此资源?
我们在IIS 6上运行ASP.NET MVC应用程序。
答案 0 :(得分:42)
保护elmah.axd的典型方案是只允许一些经过身份验证的用户才能访问它。但是,如果您的网站根本不使用任何身份验证,则可能不适用。
以下是我推荐你的内容:
elmah.axd
处理程序elmah
将日志写入某个共享数据源(如共享文件,SQLite数据库甚至SQL Server)如果您决定使用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。