ASP.NETのWebサイトでELMAHを確保
-
12-09-2019 - |
質問
私はELMAHを確保しようとする問題を抱えています。私はフィルHaackedの<のhref = "http://haacked.com/archive/2007/07/24/securely-implement-elmah-for-plug-and-play-error-logging.aspx" のrel = "noreferrerを踏襲しています「>チュートリアルの、唯一の違いは、デモプロジェクトであることで、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ファイルで遊んと仕事に以下を得ました。基本的には代わりに一般のsystem.webにelmah.axdのHttpHandlerを置く、あなたの「管理者」パスの場所のの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>
他のヒント
は、ルーティングエンジンは、そのパスを無視持ってする必要があるとしています。あなたは、例えば/admin/elmah.axdするELMAH移動したい場合は、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のために上記溶液の作品を作る上の任意の提案?
感謝します。