こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

BASIC認証でユーザー名取得

こんにちは。
現在、BASIC認証を使用した簡易会員サイトを作っています。
誰がいつログイン?したか履歴を取りたくて、会員サイト内のhtmlファイルがアクセスされた際に、cgiファイルを起動し、履歴取得をする方法で考えていましたが、ユーザー名が空欄になってしまい、どうにもうまくいきません?

現在、会員サイト内の公表ファイルは、[home]以下に入っており、そこにhtaccessも配置しています。
cgiファイルは、[cgi-bin]以下でしか動作しないので、この中に配置しています。

何か良い方法があればご教授願います。
宜しくお願いします。

投稿日時 - 2015-04-13 15:03:27

QNo.8954905

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

> REMOTE_HOSTだけが空欄になってしまいます。
> ご指摘の通り、[home]と[cgi-bin]が別フォルダのため、取得出来ないのでしょうか?

REMOTE_HOSTとBASIC認証は、まったく別件です。

多分、WebサーバーでのDNSへの問合せ負荷を軽減するために、
サーバー側の設定で ホスト名への逆引きを行っていないのでしょう。

(この場合、
REMOTE_ADDRのIPアドレスをそのままREMOTE_HOSTにコピーする仕様のサーバーと
REMOTE_HOSTを空にするサーバーがあるようです)

クライアントのホスト名が どうしても欲しいのであれば、CGI(perl)内で
$addr = $ENV{'REMOTE_ADDR'};
$host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $addr;
のようにして、自力でIPアドレスからホスト名に逆引きするようにすれば解決するはずです。

投稿日時 - 2015-04-15 12:13:57

お礼

おかげ様で、うまく取得出来ました。
ありがとうございました。

投稿日時 - 2015-04-17 08:08:51

ANo.3

> 現在、会員サイト内の公表ファイルは、[home]以下に入っており、そこにhtaccessも配置しています。
> cgiファイルは、[cgi-bin]以下でしか動作しないので、この中に配置しています。

多分、CGI内で $ENV{'REMOTE_USER'}を使ってBASIC認証のユーザー名を取り出そうとしてしても、
CGIを設置したcgi-binディレクトリでは BASIC認証をかけていないので、認証情報がないので
空になってしまうということでしょう。

対処方法はいろいろあるのでしょうけど、以下ではどうでしょう。

【案1】
.htaccessで
Options +ExecCGI
AddType text/html pl
AddHandler cgi-script pl
のような記述をすればcgi-binディレクトリ以外でもCGIが動かせるサーバーもあるので
会員用のhomeの.htaccessにこれを書いて、home下にCGIファイルを設置して試してみる。

【案2】
cgi-binにも.htaccessを設置してBASIC認証をかける
(非会員用のCGIも混在しているなら、
 BASIC認証を適応するファイルを .htaccessの<Files>で限定的にするとか
 会員用CGIは、cgi-bin下にサブディレクトリ化するとか)

【案3】
cgi-bin/members といったサブディレクトリを作って、ここでBASIC認証をかけて
この下に、会員用コンテンツやCGIを移動する。

投稿日時 - 2015-04-14 10:06:52

補足

ご回答ありがとうございます。
案2を試した結果、REMOTE_USERとREMOTE_ADDRは取得出来るようになりましたが、REMOTE_HOSTだけが空欄になってしまいます。
ご指摘の通り、[home]と[cgi-bin]が別フォルダのため、取得出来ないのでしょうか?

投稿日時 - 2015-04-15 10:19:15

ANo.2

>ユーザー名が空欄になってしまい、どうにもうまくいきません?

具体的には何が空欄ですか?

環境変数 REMOTE_USER 、perlだと $ENV{"REMOTE_USER"} に入っていませんか?

投稿日時 - 2015-04-13 21:39:48

補足

REMOTE_USERや、HTTP_HOST、HTTP_REFERER、REMOTE_ADDRを取得したいのですが、ユーザーは空欄になり、ホストは(http://aaa.com/)、アクセス元のURLは(http://aaa.com/member/)になってしまいます。

投稿日時 - 2015-04-14 09:42:18

ANo.1

BASIC認証の情報はHTTPヘッダのAuthorizationに格納されますが、
デフォルトのApache設定では環境変数にセットされないようですね。

参考URLのように、.htaccessにRewriteRuleを記述してはどうでしょうか?

参考URL:http://d.hatena.ne.jp/moroto1122/20140328/1395985640

投稿日時 - 2015-04-13 18:53:50

あなたにオススメの質問