CGI-BBS > 基本認証 > 自動パスワード制限 > passwordをテキストファイルから参照したいのですが。


カレッヂ
カレッヂ


質問者 とし  投稿日 10/22(月) 17:25:58
初めて質問させていただきます。
アクセス制限を設けたいと思い、KENTさんのgate.cgiを使用しています。
gate.cgiは、パスワードがcgiの中に直接記入されております。
今回は、登録された情報(テキストファイル)を見に行って、テキストファイル上にパスワードが存在すれば認証を行うということがしたいです。

$log[0] = /www/touroku.htm.txt;
open(LOG,"$log[0]") || &error("Can't open $log[0]");
@LINE = <LOG>;
close(LOG);
$r = $r++
($a,$b,$c,$d,$e)=split(/,/,$LINE[$r]);
if($in{'pw'} eq $d);
$PW = $d;

取り敢えず、作成してみたのが上記です。
これを実行しても、サーバーが見つかりませんというエラーになってしまいます。
テキストデータは、(日付、名字、名前、e-mailアドレス、名字の読み。)となっています。
(今回は、e-mail=パスワードとしています)

cgi初心者で、どこをどう直せばいいのかわからない状態です。
宜しくお願い致します。

最後に、初めて記入させて頂いたので、お見苦しいものになっているかもしれないことをお詫びいたします。
回答者 しあわせのツボ  [削除]  投稿日 10/22(月) 18:29:39
何をしたいのかが不明ですが、一般的なアクセス制限(各自に異なるIDとパスワードを発行し認証する)だと推測して話を進めます。
・IDを確認していません(他人のパスワードと合致した時も通ってしまいます)
・ループ処理がされていません(特定の1行しか照合していません)
・いくつかの文法ミスがあります
IDを「氏名の読み」で代用し、元のコードに近い形で書き直すとすれば
$log[0] = '/www/touroku.htm.txt';  # 文字列は必ず''か""で括る
open(LOG,"$log[0]") || &error("Can't open $log[0]");
@LINE = <LOG>;
close(LOG);
$PW = $r = 0;  # 念のため$PWと$rを初期化する
foreach (@LINE) {  # 全ての行に同じ処理をさせる
($a,$b,$c,$d,$e)=split(/,/,$LINE[$r]);
if($in{'id'} eq $e and $in{'pw'} eq $d) { $PW = 1; }
$r++;  # ++は単項演算子なのでこれでよい
}
if (!$PW) { &error('auth failed.'); }
といったところでしょうか。
コードにすっきりしない部分があるとか、touroku.htm.txtを直接リクエストされた時に全てのIDとパスワードが見えてしまうとかの問題は残っていますが、とりあえず動かすのが先決ということで。
質問者 とし  [削除]  投稿日 10/23(火) 10:37:00
早速の回答有り難うございました。
早速チャレンジしてみます。

返信(回答)する


Web裏技