16

我已将 elmah 添加到 asp.net mvc 4 应用程序中。日志记录正在工作,现在我正在尝试配置安全性,但 elmah 没有获取设置,并且所有用户都可以看到日志。

这是一个 Intranet 应用程序,因此我们正在使用 Windows 集成安全。我正在尝试限制访问,以便只有 domain\log_readers 广告组的成员才能阅读日志。

我在这里阅读了设置指南:http ://code.google.com/p/elmah/wiki/SecuringErrorLogPages我还阅读了一些关于 SO 和其他表单的帖子,这些帖子让我添加了 roleManager 和 WindowsRoleProvider 配置,一切都无济于事。

这是我的 web.config 的 elmah 部分:

<elmah>
<!--
    See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for 
    more information on remote access and securing ELMAH.
-->
<security allowRemoteAccess="true" />
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/Logs" />  
</elmah>
<location path="elmah.axd" inheritInChildApplications="false">
<system.web>
  <authentication mode="Windows" />

  <roleManager defaultProvider="WindowsProvider"
      enabled="true" cacheRolesInCookie="false">
    <providers>
      <add
        name="WindowsProvider"
        type="System.Web.Security.WindowsTokenRoleProvider" />
    </providers>
  </roleManager>
  <httpHandlers>
    <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
  </httpHandlers>
  <!-- 
    See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for 
    more information on using ASP.NET authorization securing ELMAH.
  -->
  <authorization>
    <allow roles="domain\log_readers"/>
    <deny users="*" />
  </authorization>

</system.web>
<system.webServer>
  <handlers>
    <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
  </handlers>
</system.webServer>
</location>

我还尝试通过将我的自动化配置设置为拒绝所有人来完全锁定

<authorization>
<deny users="*" />
</authorization>

并且

<authorization>
<deny users="?" />
</authorization>

日志仍然对所有人开放。

我怀疑问题可能出在位置上。我没有更改 elmah 的位置。它是从默认位置(http://server/myapp/elmah)访问的

4

2 回答 2

29

如果您使用 Elmah.Mvc,它们具有非常精细的安全设置。例如,您可以轻松地将 elmah 页面保护为仅对 Admin 组中的登录用户可用。

Elmah.Mvc 支持以下项目<appSettings>

<appSettings>
    <!-- ELMAH configuration. Admin page only available for logged in users in 
         the Admin role. -->
    <add key="elmah.mvc.disableHandler" value="false" />
    <add key="elmah.mvc.disableHandleErrorFilter" value="false" />
    <add key="elmah.mvc.requiresAuthentication" value="true" />
    <add key="elmah.mvc.allowedRoles" value="Admin" />
    <add key="elmah.mvc.route" value="elmah" />
</appSettings>

感兴趣的键是elmah.mvc.requiresAuthentication打开需要登录的用户的开关。以及elmah.mvc.allowedRoles指定用户必须处于哪个角色。

您可以从 nuget 安装 Elmah.Mvc。

于 2012-12-06T14:17:15.730 回答
3

一旦我发现如何在使用 Windows 身份验证时确定角色,上述答案效果很好:

打开命令窗口并输入以下命令:

cmd /k net user <user> /Domain

对于<user>,请替换您的用户名。该命令将列出您所属的组。

说明来自http://msdn.microsoft.com/en-us/library/gg703322(VS.98).aspx上的“如何使用 ASP.NET MVC 创建 Intranet 站点”

于 2013-08-02T16:12:20.367 回答