プロが教えるわが家の防犯対策術!

CGI勉強中です。
ある掲示板CGIを改造して会員のみに使用可にしようと考えています。パスワード自体は無事組み込むことが出来たのですが、1つ問題が出ました。
掲示板なので、過去ログがありますよね。その過去ログページを表示しようとするとまた認証ページに戻ってしまい、パスワードを再度入力→最新10件のページに戻ってしまいます。どうにかして、1度入ったらパスワードを入力しなくてもいいようにしたいのですが…
今のところこうなってます。
///////////////
if ($pass_mode == '1'){ ←もしパスを使用するだったら
if ($F{'mode'} eq '') { &pass_mode} ←モード無しの場合、パス入力画面に移動
if ($F{'mode'} eq 'admin') { &admin} ←モードアドミニならsub adminへ
}
else{
if ($F{'mode'} eq '') { &main_form} ←メイン書き込みページへ
else { &{$F{'mode'}} }
}
///////
となっています。
また、過去ページへの移動は「**.cgi?pg=10&sort=」という感じです。
この状態で、ページ移動時にパス入力ページに移動しないようにするにはどうしたらいいでしょうか?cookieを使う必要があったりしますか?

抜けてる情報・足りない情報があったら指摘してください。すぐ補足します。言語はperlで書いています。
よろしくお願いします。

A 回答 (3件)

「ハッシュ」と書くとなにやら難しそうですが、要は元のパスワードを判らなくしてしまえばいいので、$hash('pass')とやって常に4が返る(passが4文字だから)だけでもハッシュになります。



文字列を入れると1~6ケタの数字を返す簡単なハッシュなら↓のようになります。
(全角スペースいれてますのでご注意を)
sub hash {
 my ($str) = @_;
 my $max = length($str);
 my $hash = 0;
 my $count = 0;
 while ($count < $max) {
  $hash = ($hash + ord(substr($str, $count, 1))) * 56911;
  $hash = (int($hash / 100)) % 1000000;
  $count++;
 }
 return ($hash);
}
    • good
    • 0

nonchiさんと同意見です。



どうしても毎回フォームで送ることができない場合は、
パスワードの部分を暗号化(復号化する必要がないのでハッシュで十分)して表示するのも手です。

単にパスワードだけのハッシュだと、
万が一、Referrerでアドレスを拾われた場合に入られてしまいますので、
時刻と組み合わせて、例えば5分毎にハッシュを変化させるなどすれば問題ないかと。
(自作掲示板ではそうしてます)

クッキーも捨てがたいんですけど・・・
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

…ちょっと私には難しそうです。
勉強してみます。

お礼日時:2003/05/20 16:54

> また、過去ページへの移動は「**.cgi?pg=10&sort=」という感じです。



ここで、「**.cgi?pg=10&pw=xxxx」などとパスワードも送ればいいのでは?
でも、アドレスに見えるとまずいから、ボタン(フォーム)で送ったほうがいいのかもしれませんね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ちょっとやってみます。

お礼日時:2003/05/20 16:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!