Elmahは、間もなく本番稼働する予定のアプリのエラーログシステムとして使用しています。これは非常に便利ですが、このように運用環境に入ると、世界中の誰もがourdomain.com/elmah.axd
にアクセスするだけなので、エラーログにアクセスできます。
これは明らかに理想的ではありません。私は当初、そのページへのアクセスを社内のIPアドレスのみに制限するつもりでしたが、現在のシステム管理者は不可能だと言っています。だから私はここでこのリソースへのアクセスを防ぐにはどうすればいいですか?
IIS 6.でASP.NET MVCアプリを実行しています。
Elmah.axdを保護するための一般的なシナリオは、一部の認証されたユーザーのみがそれにアクセスできるようにすることです。ただし、サイトで認証をまったく使用しない場合、これは適用されない可能性があります。
これが私がお勧めするものです:
elmah.axd
ハンドラーを完全に無効にしますelmah
を構成しますSQL Serverを使用する場合は、ファーム内の複数のWebサーバーで実行されている複数のアプリケーションのログを、自分だけがアクセスできる単一の内部アプリケーションから読み取ることもできます。
これはMVCアプリケーションに最も適していることがわかりました。
http://www.beletsky.net/2011/03/integrating-elmah-to-aspnet-mvc-in.html
Elmah httpハンドラーをweb.configの別のURL(たとえば、 "Secure/elmah.axd")にポイントできます。 Web設定で他のasp.netページと同じようにURLを保護できます。
<httpHandlers>
...
<add verb="POST,GET,HEAD" path="/Secure/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<location path="Secure" > <!-- secure the Host.com/Secure path -->
<system.web>
<authorization>
<deny users="?" />
<!-- Or anything else... -->
</authorization>
</system.web>
</location>
Active Directoryメンバーシッププロバイダーを使用して、IIS7でこのアプローチをうまく使用しており、うまく機能します。 IIS6で動作するかどうかはわかりません。
ASP.NETメンバーシップを使用している場合、匿名ユーザーのelmah.axd HttpHandlerへのアクセスを制限し、「管理者」グループのログインユーザーのみを許可することは非常に簡単です。私はこのようにそれをやった:
<configuration>
...
<location path="elmah.axd">
<system.web>
<authorization>
<allow roles="Administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>
ログインしていて、「管理者」ロールのメンバーであれば誰でもこのページにアクセスできます。
ここにいくつかの便利なリンクがあります:
リモートユーザーがアクセスできないようにする場合は、<security allowRemoteAccess="yes" />
の値を<security allowRemoteAccess="no" />
に変更します。
IIS 7構成のIP制限を使用しました。デフォルトでは、親構成レベルでロックされているため、<location path="elmah.axd">
に適用することはできません。そのため、空のフォルダー"logs"
およびIIS=の制限をこのフォルダーに適用し、次にelmah.axd
ファイルの場所のパスを変更しました。これで完了です!yourdomain.com/logs/elmah.axd
へのリモートアクセスは可能ですが、特定のIPからのみです。