2009-08-07 17 views
57

ELMAHの保護に問題があります。私はPhil Haackedのtutorialに従っていますが、唯一の違いはデモプロジェクトはウェブアプリケーションであり、私のプロジェクトはウェブサイトであることです。でASP.NET WebサイトのElmahを保護する

<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を安全にする方法を教えてください。

ありがとうございました。

他に注意:
以下のアランの答えに従うと、次のようになります。

www.mysite.com/admin/elmah.axd - 認証
www.mysite.com/admin/asdasdasd/elmah.axdをトリガ - 認証
www.mysite.com/asdasdasd/admin/をトリガーelmah.axd - リソースが見つかりません。 (正確に私たちが望んでいたもの)

答えて

70

私はweb.configで遊んでいて、以下のようなことができました。基本的にelmah.axd HttpHandlerを一般的なsystem.webに入れるのではなく、あなたの "admin"パスの場所の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> 
+8

asp.net mvcを使用している場合は、追加することを忘れないでください。 routes.IgnoreRoute( "admin/elmah.axd/{* pathInfo}"); – santiagoIT

+0

セキュリティに関する問題と*** ELMAH ***:http://geeks.ms/lruiz/2014/07/21/asp-net-revisa-la-configuracin-de-elmah-en-produccin/ –

1

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で動作させるための提案はありますか?

ありがとうございました。

+0

elmah.axdをsystem.webのhttpHandlersセクションから削除し、system.webserverの下のハンドラから404エラーを取得しました。 アランが提案したのとまったく同じ、私のロケーションパス= "admin"を持っています。 IIS 7.5の実行。 – InvisibleMan1002

+0

@ダン・アトキンソンは、不正確な記述です。 IIS 7以上でホストする場合は、 'system.webServer' configセクションにHttpHandlersとHttpModulesを登録する必要があります。 –

+0

@ChrisMarisic:あなたが知っている、あなたは絶対に正しいです!私は以前の声明を引っ込めました(削除しました)。私を修正していただきありがとうございます。 :) –

25

ASP.NET MVCを使用している場合は、ルーティングエンジンでそのパスを無視する必要があります。あなたは、例えば/admin/elmah.axdするELMAHを移動したい場合は、Global.asax.csに以下を追加する必要があります

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

に追加する必要があります。これはMVCでの私の問題を解決しましたが、元の質問はASP.NET MVCに関するものではないと思います。 – pauloya

+0

MVC固有の修正を指定するための+1。 MVC3で私のために働いた。それなしで@アランの答えはMVCで動作しません。 – N30

+0

@Paulo、質問はWebformsまたはMVCを指定しません。 ASP.NETは両方の基礎であり、MVCに必要な余分なビットが含まれています。 – aarondcoleman

17

が、これは、様々なビットを一緒にパッチを当てることで動作するように取得しようとしばらく過ごしました答えのそれぞれからアドバイスを得て、私はIISのすべてのフレーバーで動作するはずの完全なソリューションをまとめました。

<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を使用している場合:

はここにあなたのweb.configの各セクションで説明する必要があるものです。ネットMVCは、RegisterRoutesメソッドで

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

を追加します。

関連する問題