人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

.htaccessについて質問です。今現在会員サイトを構築しているのです。アクセス制限はBasic認証ではなくクッキーとセッションIDを組み合わせたものを使用していますがカバーできるディレクトリではCGIなどのWebアプリが作動してくれないのでWWW上のディレクトリに置くことにしました。

しかしこの場合、会員のみ使用できるサービスがブラウザからもみれるディレクトリに置くためURLさえ分かれば誰でも観覧できてしまう点です。そこをカバーする方法としてhtaccessを使用し全てをdenyしリファーラをチェックし http://hoge.ccc/hogehoge/hoge.html からのアクセスの許可する方法は可能でしょうか? この場合、http://hoge.ccc/hogehoge/hoge2.htmlではブロックされなければなりません。

また、この場合Webセキュリティ面では大丈夫なのでしょうか?悪意を持ったユーザによってリファーラを変換しhttp://hoge.ccc/hogehoge/hoge.htmlを通したかのように見せかけブロックしてあるページを観覧することは実際に可能なのでしょうか?

よろしくお願いいたします。

●質問者: esecua
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:.htaccess BASIC認証 CGI URL Web
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● andi
●10ポイント

http://www.shtml.jp/htaccess/referer.html

.htaccessで参照元(Referer)によるアクセス制限する方法

.htaccessを用いてリファラチェックを行うことは可能です。


> 悪意を持ったユーザによって?実際に可能なのでしょうか?


リファラはクライアント側の情報なのでリファラを変換可能なブラウザorツールなどを使えば可能です。

◎質問者からの返答

なるほど。変換可能なブラウザで通り過ぎられてしまいますか。ほかに有力な方法はないでしょうか?


2 ● andi
●10ポイント

http://search.cpan.org/

The CPAN Search Site - search.cpan.org

解決方法はあることはありますが、多少面倒です。


現在、アクセス制限が出来ないコンテンツはHTMLなどの静的コンテンツのことだと思いますが(動的コンテンツであればセションチェックが可能なので)、まずこれらのファイルはWWWからアクセス不可能or外部からは分かりにくい置き場所におきます。

次に下記の仕様のCGIを作成します。


1.セションチェックを行う

2.クエリ文字列でリソース名(本当に欲しいファイル名を示す文字列)を受け、そのファイルを読み込み、画面に表示する

3.画面に表示する前にそのファイル内に存在するURL(src=””やhref=””等で検索)を自分自身(このCGI)を示しかつクエリ文字列に元のURLを追加する

※例:http://abc/def.htmlhttp://abc/session_check.cgi?url=def.html


さらに3は面倒で、元のURLに元々他にクエリ文字列が入っている場合と入っていない場合に分けて考える必要があります(元のURLに先に「?」が入っているかどうか)。


またCGIの言語がPerlでしたらCPANを探せばURLの書き換えを行ってくれるモジュールがありそうな気がしましたが、今はダウンしているようで繋がりませんでした(URI、override辺りで探せばありそう)。

◎質問者からの返答

なるほど。しかしどのようのそのようなシステムを作り上げるのかが問題ですね。。回答ありがとうございました。


3 ● ito-yu
●20ポイント

http://httpd.apache.org/docs/2.0/ja/mod/mod_actions.html

mod_actions - Apache HTTP ??????

htmlに対してアクセス制限をかけるのであれば、リファラーチェックよりも、mod_actionsのActionディレクティブでの制御が有効ではないでしょうか。


Action text/html /cgi-bin/access.cgi


で、htmlファイルへのアクセス時に/cgi-bin/access.cgiが起動しますので、ここでクッキーのチェックなどが可能です。PATH_INFOをみることでリクエストされたhtmlファイル名を判別できます。

◎質問者からの返答

なるほど。access.cgiを通してHTMLファイルを読み込ませるのですね。

ところで、このaccesss.cgiスクリプトとはどこでてに入るのでしょうか?


4 ● ito-yu
●30ポイント

http://jp.php.net/manual/ja/reserved.variables.php#reserved.vari...

PHP: 定義済の変数 - Manual

「アクセス制限はBasic認証ではなくクッキーとセッションIDを組み合わせたものを使用していますが」とあるので、認証済みのクッキーを判別するコードは書ける前提でお話を進めます。私はPerlよりもPHPが好みなのでPHPで例を書きますが、Perlでも同様のコードを書けると思います。

access.php:

<?php

$doc_root = ’/path/to/document/root’; // ドキュメントルートの絶対パス

if($_COOKIE[’auth’]){ // 認証OKの条件を入れてください

$file_path = $doc_root.$_SERVER[’PATH_INFO’];

echo file_get_contents($file_path);

}else{

die(’401 Unauthorized’);

}

?>


アクセス制限をつけたいディレクトリに置く.htaccess:

Action text/html /path/to/access.php


※access.phpへのドキュメントルートからの絶対パスに適宜変えてください


これで、*.html にアクセスしようとするとaccess.phpが呼び出され、認証条件OKならばファイルの内容を表示、さもなければエラーを吐くようにできます。当然、認証されたユーザと、閲覧してよいファイル名のチェックを追加しなければならないでしょうが。

◎質問者からの返答

回答ありがとうございました。これだけ書いていただくと高ポイントを差し上げなければなりませんね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ