投稿日:2005年07月25日 作成鷹の巣

No.19463 Apache2で認証後にJavaScriptやCGIでのユーザー名の利用方法は?



Apache2で認証後にJavaScriptやCGIでのユーザー名の利用方法は?

No.19463 投稿時間:2005年07月25日(Mon) 22:38 投稿者名:Apacheマニア URL:

Apache 2で、基本認証やダイジェスト認証でログインした後、
ページ内でJavaScriptやCGIを使ってユーザー名を利用することはできないでしょうか。
「○○さんいらっしゃいませ~」とか、
「○○さんは△△回目のログインです」とかのように表示させたりしたいのですが。


環境変数REMOTE_USERがログインユーザーだったはず。

No.19467 投稿時間:2005年07月26日(Tue) 09:14 投稿者名:松元 URL:

> Apache 2で、基本認証やダイジェスト認証でログインした後、
> ページ内でJavaScriptやCGIを使ってユーザー名を利用することはできないでしょうか。
> 「○○さんいらっしゃいませ~」とか、
> 「○○さんは△△回目のログインです」とかのように表示させたりしたいのですが。

環境変数REMOTE_USERがログインユーザーだったはず。
環境変数は装置により少し違うかもしれませんので
ベーシック検証をする環境を作って、環境変数を表示すればはっきりします。

exsaple
#!/bin/sh
echo "Content-type: text/html"
echo
perl -e "print join('<br>',%ENV);"


認証後にアクセスしてみましたが何も表示されませんでした。

No.19468 投稿時間:2005年07月26日(Tue) 13:47 投稿者名:Apacheマニア URL:

> 環境変数REMOTE_USERがログインユーザーだったはず。

ありがとうございます。調べてみたところ、確かにそのようです。

しかし、普通にtest.cgiというファイルを作って$ENV{'REMOTE_USER'}と書き、
認証後にアクセスしてみましたが何も表示されませんでした。

Apacheは2.0.54(Win32)、Perlは5.8.6で、ダイジェスト認証でやったのですが、なぜできないのでしょうか。


ユーザ名が何処かにでませんか。

No.19469 投稿時間:2005年07月26日(Tue) 16:33 投稿者名:松元 URL:

Linuxですが、Basic検証では使った事があります。
SSLで逃げちゃうのでダイジェスト認証は使った事がありません
ダイジェスト認証では違うのかな?windowsとのちがいですかね。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print join('<br>',%ENV);

で全環境は出ると思いますのでユーザ名が何処かにでませんか。
無いのかな~。


試してみました。

No.19470 投稿時間:2005年07月26日(Tue) 18:08 投稿者名:Reboot URL:

> Linuxですが、Basic検証では使った事があります。
> SSLで逃げちゃうのでダイジェスト認証は使った事がありません
> ダイジェスト認証では違うのかな?windowsとのちがいですかね。
>
> #!/usr/bin/perl
> print "Content-type: text/html\n\n";
> print join('<br>',%ENV);
>
> で全環境は出ると思いますのでユーザ名が何処かにでませんか。
> 無いのかな~。

松元さんこんにちは。いつも書き込み参考にさせて頂いています。
上記のスクリプトでは、REMOTE_USER は表示されませんでしたが、

下記のサイトを見つけ、
http://www.phoenix-c.or.jp/~drinks/cgi-bin/env/#ENV022

認証ディレクトリで
print "$ENV{'REMOTE_USER'}"
で試してみましたところ、ログインしたユーザー名が表示されました。


もう少し詳細に書いて置くべきでした。

No.19471 投稿時間:2005年07月27日(Wed) 05:06 投稿者名:Apacheマニア URL:

自分がやっていることをもう少し詳細に書いて置くべきでした。
CGI実行可能ディレクトリをpublic_html/cgi-binに限定していたので、cgiファイルはすべてそこに置き、
認証が必要なディレクトリpublic_html/testで認証後、そのファイルにアクセスしていました。

ユーザー一覧.htpasswdはpublic_htmlより上に置いてありますし、
一度認証すればブラウザを閉じるまでその認証が維持されるのでディレクトリが変わっても大丈夫だと思っていたのですが、
一時的にpublic_html/testでもCGIを実行可能なようにhost.confに

<Directory "public_html/test">
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>

を追記し、public_html/test内でRebootさんと同じように

print "$ENV{'REMOTE_USER'}"

としてみたところ、認証したユーザー名が表示されました。
認証したディレクトリ内でなければだめなようです。
複数のディレクトリで認証したときに変にならないようにこのようになるのかもしれません。
認証後に別のディレクトリのCGIファイルでユーザー名を利用することはできないでしょうか。

> Linuxですが、Basic検証では使った事があります。
> SSLで逃げちゃうのでダイジェスト認証は使った事がありません

XPの場合なんとなくBasic認証のほうがウィンドウがかっこいいですし、
認証以外のほかの情報のやり取りも暗号化できるので、本当はSSLを使いたいのですが、
やはり有料登録しないと毎回確認のようなウィンドウが出てきますし、
それだとなんとなくかっこわるいような、訪問者によっては心配してしまうような気がするので、
今のところSSLからは逃げてます。


Getメソッドによる一例。

No.19472 投稿時間:2005年07月27日(Wed) 23:03 投稿者名:かい URL:http://yaguma.com

下記のようにGetメソッドを使って飛ばしてやる方法もあります.
参照 http://yaguma.com/wordpress/index.php?p=43

/cgi-bin/test/test1.cgi
#!/usr/bin/perl
$ruser=$ENV{'REMOTE_USER'};
print "Location: http://your_domain/cgi-bin/test2.cgi?user=$ruser\n";
print "Content-type: text/html\n\n";

/cgi-bin/test2.cgi
#!/usr/bin/perl
require 'cgi-lib.pl';
&ReadParse;
print "Content-type: text/html\n\n";
print "user = ".$in{'user'};


認証していないユーザーでもusernameの名前でtest2.cgiへ行けてしまうような。

No.19473 投稿時間:2005年07月27日(Wed) 23:52 投稿者名:Apacheマニア URL:

> /cgi-bin/test/test1.cgi
> #!/usr/bin/perl
> $ruser=$ENV{'REMOTE_USER'};
> print "Location: http://your_domain/cgi-bin/test2.cgi?user=$ruser\n";
> print "Content-type: text/html\n\n";
>
> /cgi-bin/test2.cgi
> #!/usr/bin/perl
> require 'cgi-lib.pl';
> &ReadParse;
> print "Content-type: text/html\n\n";
> print "user = ".$in{'user'};

ありがとうございます。ただ、これだと少し問題があるような・・・
1.認証するディレクトリはcgi-binではない(cgi-bin以外でのcgi実行は困難)
2.http://your_domain/cgi-bin/test2.cgi?user=usernameのように直接アクセスすれば
認証していないユーザーでもusernameの名前でtest2.cgiへ行けてしまうような・・・


htaccessを上手に使えばよいのでは?

No.19474 投稿時間:2005年07月28日(Thu) 00:41 投稿者名:かい URL:http://yaguma.com

> ありがとうございます。ただ、これだと少し問題があるような・・・
> 1.認証するディレクトリはcgi-binではない(cgi-bin以外でのcgi実行は困難)
何かの言語を使わないとリクエスト情報を伝えることはできないと思います.
phpでも同じことはできますし,.htaccessを上手に使えばよいのでは?
> 2.http://your_domain/cgi-bin/test2.cgi?user=usernameのように直接アクセスすれば
> 認証していないユーザーでもusernameの名前でtest2.cgiへ行けてしまうような・・・
いけます.
usernameとtest2.cgiというファイル名が判っていればですが.


目次掲示板過去ログ目次▲頁先頭