IIS 7 で、特定の拡張子のファイルへのアクセスを制限する

2011/01/04
★★

一般的な Web アプリケーション開発においては、データストアに DBMS を利用する。

DBMS は、Web サーバーとローカルネットワーク環境で接続可能であり、HTTP 経由で DBMS へアクセスすることはできない。

小規模な Web アプリケーションでは、*.txt ファイル、*.xml ファイルをデータストアとすることがある。

この場合、IIS のデフォルトの設定では、.txt ファイル、.xml ファイルへアクセス HTTP 経由でアクセスできてしまう。

IIS のデフォルトの設定では、ディレクトリの参照が無効となっており、ディレクトリ内のファイルの一覧を表示することはできないが、ファイル名を直接してやれば HTTP 経由でのアクセスが可能。

*.txt、*.xml 等の特定の拡張子のファイルへの HTTP 経由のアクセスを制限するには、"MIME の種類" リストから、同拡張子のファイルを削除すればよい。

[スタート] -> [管理ツール] -> [インターネット インフォメーション サービス (IIS) マネージャ] 選択する。

特定の拡張子のファイルアクセスを禁止したいフォルダを選択し、[MIME の種類] をダブルクリックする。
インターネット インフォメーション サービス (IIS) マネージャ - MIME の種類

特定の拡張子 ( ここでは、.txt ) を選択し、右クリックメニューから削除を選択する。
インターネット インフォメーション サービス (IIS) マネージャ - MIME の種類 - 削除

[MIME の種類] ダイアログが表示されるので、[はい] を選択する。
インターネット インフォメーション サービス (IIS) マネージャ - MIME の種類 - 削除 - 確認ダイアログ

HTTP 経由で、.txt ファイルへアクセスし、ファイルが表示されず、404.3 エラーが表示されることを確認する。
IIS - 404.3 エラー

上記は、localhost でアクセスした場合の例。外部からアクセスした場合には、単に 404 エラーが表示される。
IIS - 404 エラー

今回は、単一のフォルダに対してのアクセス制限を行ったが、[MIME の種類] の変更は、下位のフォルダへ継承されるので、上位のフォルダに対してアクセス制限を行えば、複数のフォルダ内の特定の拡張子のファイルへの HTTP 経由のアクセス制限をすることができる。

また、今回は、UI での実現方法の紹介を行ったが、web.config ファイルへ以下のノードを追加することによっても実現可能。web.config ファイルが存在しない場合は、新規に作成すればよい。(Apache の .htaccess と同様と考えればよい。)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <staticContent>
            <remove fileExtension=".txt" />
        </staticContent>
    </system.webServer>
</configuration>

以上