端くれプログラマの備忘録 Apache [Apache] mod_actionを使ってファイル保護の仕組みを実装する

[Apache] mod_actionを使ってファイル保護の仕組みを実装する

会員制サイトなど、ログイン無しでの特定ファイルのアクセスを禁止したい。

手っ取り早いのは、Basic認証でディレクトリ以下を丸ごと保護する方法。だけど、いまどきBasic認証というのもちょっと。セッションを使ったログイン管理を行っているサイトにはそぐわないし。

別の方法としては、保護したいファイルをドキュメントルート外に配置して、プログラム経由でファイルにアクセスする方法。例えば、<img src=”cat.jpg”>とする代わりに<img src=”pic.php?name=cat.jpg”>とかして、pic.php中でユーザ認証を行えば良い。だけど、HTMLのカスタマイズが必要なので採用の敷居は高い。

mod_actionを使うと、HTMLのカスタマイズ無しに後者の方法が使えるらしい。以下参考サイトより覚え書き。

mod_actionsを使ってドキュメントや画像、Flashファイルを保護する|A Day In The Boy’s Life
http://ameblo.jp/itboy/entry-10696572358.html

1. mod_actionsモジュールをロードする

/etc/httpd/conf/httpd.conf

LoadModule actions_module modules/mod_actions.so

2. .htaccessでMIMEタイプとプログラムを紐付ける

Action image/gif /check_login.php

3. 保護の仕組みを実装する

check_login.php

<?php
if (empty($_COOKIE['username'])) {
    header('HTTP/1.0 401 Unauthorized');
    echo "Unauthorized. Please login";
} else {
    readfile($_SERVER['DOCUMENT_ROOT'] . $_SERVER['PATH_INFO']);
}
?>