.NET TIPS

[ASP.NET]特定のサービスを無効にするには?

山田 祥寛
2004/02/13

 別稿「TIPS:[ASP.NET]特定の拡張子に対するアクセスを制限するには?」では、ASP.NETの動作に際して、内部的にはHTTPハンドラ・クラスが利用されていることを紹介した。HTTPハンドラ・クラスは、「.aspx」や「.asmx」「trace.axd」など、ASP.NETで使われる主要な拡張子のファイルに対してあらかじめ定義されているため、一般的なASP.NET Webアプリケーションの実行環境ではHTTPハンドラの存在を意識する必要はないだろう。

 参考までに、サーバ・デフォルトの構成ファイルであるmachine.configの該当部分を抜粋してみよう。aspnet_isapi.dllは、IISからユーザーの要求を受け取ると、まずはmachine.configの該当個所を参照し、適宜必要なHTTPハンドラ・クラスをコールする。

<httpHandlers>
  <add verb="*" path="trace.axd"
       type="System.Web.Handlers.TraceHandler" />
  <add verb="*" path="*.aspx"
       type="System.Web.UI.PageHandlerFactory" />
  <add verb="*" path="*.ashx"
       type="System.Web.UI.SimpleHandlerFactory" />
  <add verb="*" path="*.asmx"
       type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>
  ……中略……
  <add verb="*" path="*.asax"
       type="System.Web.HttpForbiddenHandler" />
  <add verb="*" path="*.ascx"
       type="System.Web.HttpForbiddenHandler" />
  <add verb="*" path="*.config"
       type="System.Web.HttpForbiddenHandler" />
  ……中略…….
  <add verb="GET,HEAD" path="*"
       type="System.Web.StaticFileHandler" />
  <add verb="*" path="*"
       type="System.Web.HttpMethodNotAllowedHandler" />
</httpHandlers>
machine.configであらかじめ定義されているHTTPハンドラ・クラス

 しかし、複数人でサーバを共有している環境下においては、時として、デフォルトで用意された拡張子を禁止したいというケースがある。例えば、一般的な「.aspx」ファイルの配置は許しても、不特定多数のサーバから常時アクセスされる可能性がある「.asmx」ファイル(XML Webサービス)の配置は許可したくないというようなケースである。そのような場合には、「TIPS:[ASP.NET]特定の拡張子に対するアクセスを制限するには?」で紹介した<httpHandlers>要素を利用することで、特定の拡張子の挙動を制限することができる。

 以下に、この制限を行うための2つの手法を挙げておくことにしよう。

(1)machine.configで特定の拡張子の挙動を制限

 最初の手法は、machine.configでの設定により、マシン・レベルで「.asmx」ファイルの動作を禁止する方法だ。この手法は、複数のアプリケーション管理者が1つのサーバ環境を共有しているようなケースで利用できる。

  ……前略……
<section name="httpHandlers" type="System.Web……"
  allowDefinition="MachineOnly"/>
  ……中略 ……
<httpHandlers>
  <add verb="*" path="*.asmx"
       type="System.Web.HttpForbiddenHandler"  validate="false"/>
</httpHandlers>
machine.configの設定で特定の拡張子の挙動を制限する手法

 System.Web.HttpForbiddenHandlerクラスは、クライアントの要求に対して「アクセス禁止」エラーを応答するためのHTTPハンドラ・クラスだ。単純に該当の<add>要素を削除しても、「.asmx」ファイルの挙動を抑制できるが、その場合、「.asmx」ファイルのソース・コードがそのまま出力されてしまうので注意してほしい。ソース・コードには、多くの場合、セキュリティ・ホールとなる情報が含まれている可能性があるので、そうした原因となるアプローチは採用するべきではない。

 また、machine.configで<httpHandlers>要素の内容を編集した場合には、<section>要素でallowDefinition属性を"MachineOnly"に設定しておく必要がある。さもないと、アプリケーション単位で再び「.asmx」ファイルの利用を可能にできてしまうためだ。

[注意]

machine.configを編集する場合には、必ずバックアップを取ること。machine.configの設定はサーバ全体に及ぶため、もしも誤った設定でサーバ全体のアプリケーションが動作しなくなった場合、すぐに元の状態に復帰できるように備えておくことは重要だ。

(2)web.configで特定の拡張子の挙動を制限

 もう1つの手法は、アプリケーション・ルート直下にあるweb.configでの設定により、アプリケーションレベルで「.asmx」ファイルの動作を禁止する方法だ。この手法は、複数のコンテンツ作成者が、1つのアプリケーション配下でサブフォルダを分割管理しているようなケースで利用できる。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <location allowOverride="false"/>
    <system.web>
      <httpHandlers>
        <add verb="*" path="*.asmx"
             type="System.Web.HttpForbiddenHandler" />

        <remove verb="*" path="*.soap" />
      </httpHandlers>
    </system.web>
  </location>
</configuration>
web.configの設定で特定の拡張子の挙動を制限する手法

 <httpHandlers>要素とその配下の<add>要素の記述については、(1)のケースと同様だ。ただし、web.configでHTTPハンドラ・クラスの内容を制限した場合には、<location>要素でallowOverride属性をfalseに設定しておく必要がある。さもないと、サブフォルダ単位で再び「.asmx」ファイルの利用を有効にできてしまうためだ。

 また、<add>要素を以下のように<remove>要素に置き換えても、「.asmx」ファイルの挙動を抑止することはできる。

<remove verb="*" path="*.asmx" />

 ただし、この場合には、「.asmx」ファイルのソース・コードがそのまま出力されてしまうので注意してほしい。ソース・コードが参照できてしまう環境を作ることは、先にも述べたように原則として好ましくない。End of Article

カテゴリ:Webフォーム 処理対象:構成ファイル
使用キーワード:<httpHandlers>要素
関連TIPS:特定の拡張子に対するアクセスを制限するには?
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET]特定の拡張子に対するアクセスを制限するには?
[ASP.NET]アプリケーションにログ参照のユーティリティを追加するには?
[ASP.NET]アプリケーション個別の構成ファイルの変更を禁止するには?
[ASP.NET]ASP.NETアプリケーションに独自の拡張子を追加するには?
[ASP.NET]動的にJPEG画像を作成するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間