首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ASP.NET网站中保护Elmah

在ASP.NET网站中保护Elmah
EN

Stack Overflow用户
提问于 2009-08-07 15:17:52
回答 4查看 14.9K关注 0票数 59

我在尝试保护ELMAH时遇到了麻烦。我关注了Phil Haacked的tutorial,唯一的区别是演示项目是一个web应用程序,而我的项目是一个网站。

代码语言:javascript
复制
   <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>

在前导"/“的情况下,我收到的响应是”找不到资源。“,如果删除前导的"/”,除了身份验证可以通过在/admin/elmah.axd前面附加一个目录名来绕过之外,其他一切都可以正常工作。

例如,没有前导"/“

www.mysite.com/admin/elmah.axd -触发身份验证

www.mysite.com/asdasdasd/admin/elmah.axd -不触发身份验证并显示ELMAH

如何确保ELMAH是安全的,同时保持远程查看日志的能力?

谢谢。

其他人注意:

按照下面Alan的回答,结果如下。

www.mysite.com/admin/elmah.axd -触发身份验证

www.mysite.com/admin/asdasdasd/elmah.axd -触发身份验证

www.mysite.com/asdasdasd/admin/elmah.axd -找不到资源。(这正是我们想要的)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-10 16:29:52

我试用了一下web.config,并让下面的代码正常工作。基本上,不是将elmah.axd HttpHandler放在一般的system.web中,而是专门添加到您的“elmah.axd”路径位置的system.web中。

代码语言:javascript
复制
<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>
票数 70
EN

Stack Overflow用户

发布于 2010-10-15 07:32:34

如果您使用的是ASP.NET MVC,则需要让路由引擎忽略该路径。例如,如果您想要将elmah移到/admin/elmah.axd,您应该将以下内容添加到Global.asax.cs:

代码语言:javascript
复制
routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");
票数 25
EN

Stack Overflow用户

发布于 2011-06-08 00:56:28

我花了一段时间尝试通过拼凑来自每个答案的不同建议来实现这一点,现在我已经整合了一个完整的解决方案,它应该适用于所有IIS。

下面是您的每个web.config部分中需要包含的内容:

代码语言:javascript
复制
<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,则添加

代码语言:javascript
复制
routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");

在您的RegisterRoutes方法中。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1245364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档