CGI-BBS > 電子掲示板 > 簡易BBS > minibbs の情報記録機能


カレッヂ
カレッヂ


質問者 kAppa  投稿日 6/5(火) 23:07:49
ex 1.17 についての質問です。説明文に情報記録機能として、パスワード保護したページに設置されているときには、認証を受けたユーザ名がホスト名といっしょに記録される、とありますが、ユーザ名がどこに記録されるかわからないでこまっています。ご存知の方、ぜひお知恵を拝借させてください。
回答者 中級者  [削除]  投稿日 6/6(水) 03:07:20
http://www.kcb-net.ne.jp/ki-net/minibbs-ex-1.17/crypt.cgi
上記当方のurlでcrypt.cgiを設定使用した時に次のように展開します。

暗号文字化のページで暗証番号に暗号を記入して暗号化した時に次のページで
実行結果
MD5暗号試験=$1b2WL6fn7EDA
MD5照合試験=$1b2WL6fn7EDA
○MD5は使えません
DES暗号試験=00ugZqi/7Scl2
DES照合試験=00ugZqi/7Scl2
○DESが使えます

●DESを使ってください。

暗証番号 : 123456
コピー用 : $admin_passwd = 'dquG4Dq41PGJE'; (DES)



  
質問者 kAppa  [削除]  投稿日 6/6(水) 09:37:54
レスありがとうございました。
 お教えいただいたのは、設置に先立って管理コードを暗号化するところですね?各投稿のユーザ名がやはりこれを用いて暗号化されている、ということだと思うのですが、暗号化されたユーザ名はどちらになるのでしょうか?
 ちなみに説明文では次のようになっています。

「情報記録機能 投稿者情報は、非公開に設定しても記録は残ります。 また、パスワードによるアクセス制限をしているページに設置した場合には、認証を受けたID(UserName)がホスト名と同時に記録されます。 」
http://www.rescue.ne.jp/cgi/minibbs-ex/

これは.htaccess などでアクセス制限をしている場合に、ログインで入力したユーザ名が記録される、ということだと思っていたのですが、あるいは勘違いをしているかもしれません。この点もふくめて、どうぞご教示下さいませ。
回答者 中級者  [削除]  投稿日 6/6(水) 10:29:18
http://www.kcb-net.ne.jp/ki-net/minibbs-ex-1.17/bbs.cgi

詳しくは分かりませんが上記の当方設定のurlの場合には新規投稿をした時に
投稿文章の上部にそれらしきものが記録されておりますがこのことを言っている
のではないでしょうか?

その他ファイルを見てみましたが該当の内容が見当たりませんでしたのでそうでは
無いかという気がしております。
質問者 kAppa  [削除]  投稿日 6/6(水) 11:25:20
早速のレスありがとうございました。
確かに投稿の最初のところに、日付、時間、投稿者、ホスト名、ip、ブラウザ・・・という情報が記載されますが、投稿者はあくまで投稿の際に記入した名前で、ログインのID ではないようです。
おっしゃるとおり、ほかのファイルにもそれらしいところがありませんし、なんだか自分が勘違いしていたのかなというきがしてきました。ううむ。
これの記録が残るという点に魅力を感じて導入したので、少々残念です。
もしまたなにかわかりましたら、どうぞお教えいだだけましたらたいへんうれしいです。

回答者 おおがみ  [削除]  投稿日 6/6(水) 14:24:20
アクセス制限をサーバーで実施されている場合には環境変数 REMOTE_USER に認証で入力したIDが設定されるそうです(apacheの場合。他のサーバーは判りません)。

bbs.cgi(オリジナルソース)の1102,3行目の
> if ($ENV{'REMOTE_USER'}) { $HOST = $HOST . " - $ENV{'REMOTE_USER'}"; }
> else { $HOST = $host; }
で、REMOTE_USERが設定されていたらホスト名の後ろにユーザー名を付けるようにしていますね。

もし、認証しているのにホスト名の後ろに名前が付いていない場合はREMOTE_USERのサポートをしていないサーバーを利用しているということなのかもしれません。
質問者 kAppa  [削除]  投稿日 6/6(水) 14:35:07
レスありがとうございました。
なるほど、対応する動作を行わせる部分はたしかにプログラム中にある、ということですね。
cgi は自分で立てたサーバ上に設置していまして、apache 1.3.12 です。認証の動作は問題なく動いています。
REMOTE_USER 関連の設定の問題でしょうか。。。まだ初級者なので、よくわかっていないところがあるかもしれませんが、この点少し調べてみようと思います。
ありがとうございました。
回答者 おおがみ  [削除]  投稿日 6/6(水) 17:54:14
自分でたてたサーバーならば、いろいろ実験が出来ますね。
単純にREMOTE_USERがどうなっているか実験するプログラムを実行してみてはどうですか?
たとえば、
----------------------------------------------------------
#!/bin/sh

echo Content-type: text/plain
echo

echo REMOTE_USER = $REMOTE_USER
----------------------------------------------------------
これを info.cgi という名前のファイルに保存して、掲示板と同じディレクトリに置きます。
パーミッションを755にして、ブラウザからアクセスしてください。
「REMOTE_USER = xxxx」xxxxの部分が認証に使ったIDが入っていればサーバーの動作は
問題ないと思います。

minibbs ex 1.17を動作させてみたのですが、REMOTE_USERの表示は出来ていました。
質問者 kAppa  [削除]  投稿日 6/6(水) 18:12:57
早速のレスありがとうございました。
やってみたところ、ちゃんとREMOTE_USERは表示されました!
となると、bbs.cgi の初期設定の問題ということになりますね。。。調べてみます。
ちなみに表示は投稿内容の上部、ホスト名[ip address] のあとに出るのでしょうか。
いずれにせよ、大変助かりました。ありがとうございます。
質問者 kAppa  [削除]  投稿日 6/6(水) 18:36:14
早速のレスありがとうございました。
やってみたところ、ちゃんとREMOTE_USERは表示されました!
となると、bbs.cgi の初期設定の問題ということになりますね。。。調べてみます。
ちなみに表示は投稿内容の上部、ホスト名[ip address] のあとに出るのでしょうか。
いずれにせよ、大変助かりました。ありがとうございます。
回答者 おおがみ  [削除]  投稿日 6/7(木) 00:25:21
初期設定で関係するとすれば、 $view_host を0にすると表示されなくなります。
それ以外はないと思います。

どんな風に表示されているのかというと
「2001/6/6 (水) 23:41:16 - 123 -  - my - No.991838476」
こんな風です。「my」が認証に使ったIDです。

で、これをみてなんかおかしいなぁと思っていたら、ホスト名とブラウザ名が表示されていません。
ソースを眺めていたらオリジナルソースの1102行目
> if ($ENV{'REMOTE_USER'}) { $HOST = $HOST . " - $ENV{'REMOTE_USER'}"; }

> if ($ENV{'REMOTE_USER'}) { $HOST = $host . " - $ENV{'REMOTE_USER'}"; }
であるべきだと思います。そうすると、
「2001/6/6 (水) 23:57:03 - 123 - cache022.allnet.ne.jp [211.9.1.22] - Mozilla/4.6 [ja] (WinNT; I) - my - No.991839424」
と期待どうりの表示ではないかと思います。この件はrescueさんに質問をだしてみます。

質問者 kAppa  [削除]  投稿日 6/7(木) 04:44:27
おつきあい下さいましてありがとうございます。
私の表示ですと、ブラウザのタイプのあとがすぐに記事番号になってしまい、

2001/6/6 (水) 18:21:34 - test - 130.xxx.xxx.xxx [130.xxx.xxx.xxx] - Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90) - No.991819294

といった表示になってしまいます。結局どこをどういじればよいのか分からず、とほうにくれておりました。あるいはアクセス制限のしかたが悪いのではないかとも考えております。(ユーザのディレクトリに.htaccess をおいて、そのすぐ下のディレクトリにcgi が一式設置してある、というやり方をとっています)プログラムについて rescue さんに御質問いただけるということで、お手数をかけますが、どうぞよろしくお願いいたします。
回答者 おおがみ  [削除]  投稿日 6/7(木) 16:16:51
> 2001/6/6 (水) 18:21:34 - test - 130.xxx.xxx.xxx [130.xxx.xxx.xxx] - Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90) - No.991819294
このように表示されるということは REMOTE_USER に正しくIDが受け渡されていないと言うことでしょう。
前にやってもらった実験の結果と合わせると、掲示板へのアクセス時には認証が行われていないと判断できると思います。
http(apache)のアクセスログにはどの様に記録されているでしょうか? 格納場所・ログファイル名は apacheの設定ファイル(httpd.conf)を見て探し出してください。
多くの場合、httpd-access.log というファイル名で記録されているかもしれません。

「cache022.allnet.ne.jp - my [06/Jun/2001:23:57:04 +0900] "POST .....以下省略」

このように3番目のデータが認証を受けたIDとして記録されています。認証を受けていない場合には「-」になります。
ここのデータを見る事によって認証を受けているか受けていないか、はっきりと判ると思います。
ログファイルを探すのは大変かもしれませんががんばって探し出してください。


------

認証モード時に表示内容が少なくなる件ですが、rescueさんから返事を貰いました。
私の考えた修正で問題ないそうです。これについては近々案内が出るとおもいます。
でも、今かかえている問題の解決には結びつかないんですよねぇ...。

質問者 kAppa  [削除]  投稿日 6/7(木) 19:30:02
 早速のレスありがとうございました。いつもすみません。
 アクセスログを見ることができました。やはり三番目の部分が - になっているので、うまく認証されていないようですね。ううむ。でも掲示板にアクセスしようとすると、ちゃんと id/pw を聞いてくるのです。.htaccess の場所を、一つ上のディレクトリに移したり、cgi のディレクトリに移したりして試みましたが結果は同様でした。これはもはや認証の問題のようですね。このあたり、どのような可能性があるところでしょうか。httpd.conf の設定とか、cgi のフォルダをユーザフォルダ内に無理矢理作って設置していることとか、そのあたりくらいしかさしあたって思いつきませんが、いろいろ試してみたいと思います。
質問者 kAppa  [削除]  投稿日 6/8(金) 09:30:13
さきほどあらためてアクセスログをみたところ、ログイン名がかかれている行とかかれていない行があることがわかりました。
GET の含まれる行には、書かれているのとそうでないのがあり、 POSTの含まれる行には、書かれていません。
認証の仕組みを自分でもう少し勉強する必要がありそうですね。。。。
回答者 おおがみ  [削除]  投稿日 6/8(金) 18:09:08
設定ファイル .htaccess のlimitディレクティブの指定にPOSTを含めているでしょうか?

私の設定ファイルの一部
-------------------------
<Limit GET POST>     ← ここです
require user my
</Limit>
-------------------------

w3mというブラウザではPOSTを書いてないと記事を投稿したときにはユーザー名を送信してませんでした。ほかにも同じ動作をするブラウザがあるかもしれません。
質問者 kAppa  [削除]  投稿日 6/8(金) 18:26:33
ありがとうごさいます!!!
そうでした。制限する動作で POST を抜かしていたのでした。初歩的なミスで、面目次第もありません。
さて、変更を加えてみましたが、Limit 行に GET POST を両方書くと、なぜだかうまくゆきませんでした。Limitを指示するブロックを二つ作ったら両方で認証の動作をするようになっています。こうした書き方でよいのかどうか、不安は残りますが、とりあえずユーザ名を表示させる、という所期の目的は達しました。これもおおがみさんに適切なアドバイスをいただいたおかげです。ありがとうございました。
回答者 おおがみ  [削除]  投稿日 6/9(土) 02:25:49
おめでとうございます。

ただ、リファレンスには「Limitディレクティブを複数回書くことは出来る」とは書いてありませんでした。
たまたまうまくいっているだけなのかもしれません。
<Limit GET POST>を書かないで、requireの行だけ書くと、すべてのアクセス(GET,POST,HEAD等)
で認証が必要になるそうです。

ですから require行だけ書いておくのでも良いかと思います。

返信(回答)する


Web裏技