我有麻烦试图保护ELMAH。我跟随菲尔Haacked的的教程,唯一的区别是示范项目是一个Web应用程序,我的项目是一个网站。

   <add verb="POST,GET,HEAD" path="/admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />

   <location path="admin">
        <system.web>  
            <authorization>  
                <deny users="?"/>  
            </authorization>  
        </system.web> 
    </location>

凭借领先的“/”我收到的响应“的资源不能被发现。”,除了认证可以通过在/管理之前附加目录名被忽略,如果我删除前导“/”一切工作正常/ elmah.axd。

例如没有前导 “/”

www.mysite.com/admin/elmah.axd - 触发认证结果 www.mysite.com/asdasdasd/admin/elmah.axd - 不触发认证和显示ELMAH

我怎样才能确保ELMAH是安全的,同时保持远程查看日志的能力?

感谢。

请注意他人:点击 继将按以下结果艾伦的回答。

www.mysite.com/admin/elmah.axd - 触发认证结果 www.mysite.com/admin/asdasdasd/elmah.axd - 触发认证结果 www.mysite.com/asdasdasd/admin/elmah.axd - 资源无法找到。 (正是我们想要的)

有帮助吗?

解决方案

我在web.config发挥各地,并得到了以下工作。基本上代替把elmah.axd的HttpHandler在一般的System.Web,在你的“管理员”的路径位置的对System.Web特别添加它。

<location path="admin">
    <system.web>
        <httpHandlers>
            <add verb="POST,GET,HEAD" path="elmah.axd"
                 type="Elmah.ErrorLogPageFactory, Elmah" />
        </httpHandlers>
        <authorization>
            <deny users="?"/>
        </authorization>
    </system.web>
</location>

其他提示

如果你正在使用ASP.NET MVC,你将需要有路由引擎忽略这条道路。如果要移动到ELMAH为/admin/elmah.axd比如,你应该添加以下的Global.asax.cs:

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");

在花了一段时间试图让这个从每个答案的建议的各个位拼凑的工作,我已经把应该针对IIS的所有口味工作的完整解决方案。

下面就是需要在每一个你的web.config部分:

<configuration>
  <configSections>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>

  <elmah>
    <!-- set allowRemoteAccess="0" for extra security -->
    <security allowRemoteAccess="1"/>
  </elmah>

  <system.web>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>
  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>
  </system.webServer>

  <location path="admin">
    <system.web>
      <authorization>
        <!--<allow users="Admin" /> -->
        <deny users="?" />
      </authorization>
      <httpHandlers>
        <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
      </httpHandlers>
    </system.web>
    <system.webServer>
      <handlers>
        <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
      </handlers>
    </system.webServer>
  </location>

</configuration>

如果你正在使用Asp.Net MVC,添加

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");

在你的RegisterRoutes方法。

在IIS 7.5 Windows Server 2008中,有一个名为system.webServer另一部分。 为了ELMAH工作,这必须被加入:

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

我已经尝试了一些变化,但我无法使用上述解决方案,以防止 从工作 '/blah/elmah.axd'。

在制备上述溶液工作IIS 7.x的任何建议?

感谢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top