特定のファイル・ディレクトリのアクセスを拒否する
※当サイトは、アフィリエイト広告を掲載し、収益を得て運営しています。
Webサーバーにアップしたファイルの中には、ユーザーから見られたくない、または見せる必要の無いファイルってありますよね。例えば、Dreamweaverのテンプレートファイル(.dwtファイル)、設定用のファイル(.xmlや.iniファイル)、その他秘密のファイルなどのことです。
そもそも重要なファイルは、HTTPでアクセスできるような場所に配置すべきではありません。しかし、ドキュメントルート以上の階層に上がれないレンタルサーバーなどで、そうせざるをえない場合などもあるでしょう。このページでは、そういった際に利用する、.htaccessを利用したファイル・ディレクトリへのアクセス制限についてご紹介します。
セキュリティ上の問題や基本的なエラーを避けるため、.htaccessの前知識として当ディレクトリTOPページ内にある、.htaccessの基本も併せてお読みください。
.htaccessへの指定方法
アクセス制限の種類によって、指定方法が異なります。それぞれ見ていきましょう。
特定のディレクトリ以下のアクセスを拒否する
ある特定のディレクトリ以下の、HTTPからのアクセスを全て拒否する場合の設定です。(以後、最終行の改行を忘れないでくださいね。)
特定のファイルのアクセスを拒否する
ある特定のファイルだけ、見せたくないということはありますよね。ここでは、template.dwtファイルへのアクセスを拒否する例を挙げます。(※分かる方へ:ここは本当は正規表現を使う必要はありませんが、後からの追加のしやすさからこのようにしました。)
Deny from all
</Files>
複数のファイルを設定することもできます。下記は、template.dwtに加え、template2.dwtも拒否します。
Deny from all
</Files>
上記を見てわかるように、ファイルを指定する部分にカッコをつけて、ファイル名をパイプ( |)でつなげていけば、指定ファイルを増やしていくことができるということですね。念のため、前述の例にtemplate3.dwtも追加で拒否する指定を記載しておきます。
Deny from all
</Files>
特定の拡張子のアクセスを拒否する
ある特定のファイルだけ、というと、指定洩れの可能性が出てくることがあります。拒否したい拡張子は同じであることも多いので、特定の拡張子のアクセスのみを拒否するという方法も便利です。拡張子が.dwtのファイルを該当ディレクトリ以下全て拒否する場合は下記です。
Deny from all
</Files>
こちらもファイル指定の場合と同様、カッコとパイプを使って、複数ファイルを指定することができます。下記は.dwtと.xmlファイルを拒否します。
Deny from all
</Files>
補足説明
拒否した際には403 Forbiddenが返される
なお、このページの方法でアクセスを拒否した場合、ApacheはHTTPステータスコードの403 Forbiddenを返します。簡単に言えば、「このファイル(ディレクトリ)はアクセスが許可されませんでした」というApacheからの通知のようなものです。
なお、エラーページを指定するでご紹介しているように、403 Forbiddenが発生した際の表示をカスタマイズすることもできます(404に比べたら、あまり設定することはありませんけどね)。
孤立したファイルであれば、そもそもアクセスされないのか
.htaccessで認証をかけるというのはそれほど面倒なわけではありません。しかし、記述ミスなどにより、ちょっとしたことで動作しなかったりするので、面倒に感じる方もいるでしょう。
そもそも、どこのページからもリンクされていない孤立したファイルであれば、アクセスされないことも多いです。しかし、(ゆくゆくお話ししますが)DirectoryIndexという機能が適切に設定されていなかったり、ファイル名が推測できたり、意図せず検索エンジンにインデックス(登録)されてしまったりなどで、ファイルにアクセスされてしまう可能性はあります。
読まれたら困る重要なファイルをアップしなければならない場合は、面倒がらずに.htaccessで拒否されることを強くお勧めします。
12/06/30 facebookページ開設しました。RSS代わりにも使いたいと思います。
コメント
- 小姑 さん 2011年02月11日18時14分
"^template.dwt$" で、「.」のエスケープが抜けているように思いました。 ⇒ "^template\.dwt$" 失礼致しました。
- 馬場誠 さん 2011年02月11日19時06分
おっしゃるとおりです。早速修正しました。 動作確認はとっていたのですが、「.」が「任意の一文字」として「ドット」にマッチしてしまっていたため、目的通りに動いてはいたので気がつきませんでした。 ご指摘いただきありがとうございました!
↓もし参考になりましたら、シェアしていただけると嬉しいです(^-^)