我们正在使用 Elmah 作为即将投入生产的应用程序的错误日志记录系统。它非常有用,但是如果像这样投入生产,任何人都可以访问错误日志,因为他们只需访问ourdomain.com/elmah.axd
。
显然这不是理想的情况。我最初打算仅将访问权限限制为公司内部的 IP 地址,但现在我们的系统管理员表示这是不可能的。因此,我在这里询问如何防止访问此资源?
我们正在运行一个基于 ASP.NET MVC 的应用程序,并使用 IIS 6。
我们正在使用 Elmah 作为即将投入生产的应用程序的错误日志记录系统。它非常有用,但是如果像这样投入生产,任何人都可以访问错误日志,因为他们只需访问ourdomain.com/elmah.axd
。
显然这不是理想的情况。我最初打算仅将访问权限限制为公司内部的 IP 地址,但现在我们的系统管理员表示这是不可能的。因此,我在这里询问如何防止访问此资源?
我们正在运行一个基于 ASP.NET MVC 的应用程序,并使用 IIS 6。
保护 elmah.axd 的典型场景是仅允许某些经过身份验证的用户能够访问它。但如果您的网站根本不使用任何身份验证,这可能不适用。
下面是我推荐的做法:
elmah.axd
处理程序elmah
配置为将日志写入某个共享数据源(如共享文件、SQLite 数据库甚至是 SQL Server)如果您决定使用 SQL Server,您甚至可以从单个内部应用程序中读取运行在多个 Web 服务器上的多个应用程序的日志,该应用程序只能由您访问。
我发现对于MVC应用程序,这是最可接受的:
http://www.beletsky.net/2011/03/integrating-elmah-to-aspnet-mvc-in.html
<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上是否有效。
<allow users="UserName" />
,但它没有起作用!请帮帮我。 - Wasim<configuration>
...
<location path="elmah.axd">
<system.web>
<authorization>
<allow roles="Administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>
现在,任何已登录并且是“管理员”角色成员的人都可以访问该页面。
如果你的意图是禁止远程用户访问,只需将<security allowRemoteAccess="yes" />
的值更改为<security allowRemoteAccess="no" />
。
<location path="elmah.axd">
中应用它,因为它被锁定在父级配置层面上。因此,我创建了一个空文件夹"logs"
,并在IIS中对该文件夹应用了限制,然后修改了elmah.axd
文件的位置路径。这就是全部内容!您可以远程访问yourdomain.com/logs/elmah.axd
,但只能从特定的IP地址访问。