人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

前回質問させていただきましたが、回答が無かったのでもっと具体的に考えました。
認証スクリプトで、掲示板を制限しています。両方Perlです。ID,passがguestのときは、閲覧だけで書き込めないようにしたいと思います。
掲示板の処理で、$ENV{’REMOTE_USER’}がguestのとき、実行できないって言うことができればよいんでしょうか。print省略
<FORM method="POST" action="bbs.cgi">
名前<input type="text" size="20" name="name"><br>
<input type="submit" value="送信"><br>
</FORM>
もし,guestだったら
<input type="submit" value="送信"><br>
・この一行消しちゃうっていうことで実現できますか?
・問題がありましたらその他の方法も教えてください。
できれば、それぞれ具体的なコードも書いていただけると助かります。Perl勉強しはじめたばかりという前提でよろしくお願いします。

●質問者: rain2003
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Perl print コード スクリプト 他の方法
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●20ポイント

(1)guestさんが来たときに「せっかくテキストボックスに書き込んだのに送信ボタンが見当たらないよ(T_T)???」なんて迷惑をかけずに済みますので、消すとすれば<form??>から</form>までの全てが良いでしょうね。

「ユーザー登録がお済になるまでは投稿いただけません。申し込みお手続きページからお申し込み願います。申し込み中の方は申し訳ございませんがユーザー名とパスワードのお知らせメールが届くまでお待ちください。」なんてコメントを入れるのも良いでしょう。

(2)簡単なセキュリティ強化として、どこから投稿したのかを$ENV{HTTP_REFERER}でチェックして、もしも自分のサイト以外からの場合は書き込みしないように処理を分岐させましょう。

http://www.futomi.com/lecture/env_var/http_referer.html

(3)リファラは偽装が簡単ですからWEB開発の中級者以上であれば簡単に突破できてしまいますし、基本認証も上級者であれば突破可能なものです。

学習用ということでは(2)までを実装すれば十分だと思いますが、本当に大切な掲示板であれば(2)までが出来たところでセッションについて学んで実装しましょう。

さらにセッションとSSLを組み合わせればショッピングサイトのようなものも作れるようになります。

いろいろな仕様や仕組みがあって大変だと思いますが、少しずつ学んでいってください。

◎質問者からの返答

早速のお返事ありがとうございます。

いろいろと勉強になります。

とりあえず、if文を使って(1)をがんばりたいと思います。

次の回答者の方からできれば、正解のコードをお願いします。もう少し質問続けたいと思います。


2 ● TomCat
●50ポイント ベストアンサー

ゲストには書かせない、という規制を行う場合、

単に書き込みフォームを消すだけでは不十分です。

フォームを使わず直接POSTデータを送信されてきた場合でも、

それを拒絶する仕組みを工夫しなければなりません。

そのためのトラップは、書き込み動作をさせるルーチンの

冒頭に仕込みます。

【例】
# ゲストが書き込みしようとしたらエラーにする
if ($ENV{'REMOTE_USER'} eq "guest") {
    &error;
}
# 書き込み処理
    :
    :

これで、基本認証時にIDをguestとしたユーザーは、

書き込みをしようとすると sub error に飛ばされます。

もちろん、

sub error {
print "Content-type: text/html\n\n";
print <<"EOM";
<html>
<body>
エラーです。ブラウザの戻るボタンで戻ってください。
</body>
</html>
EOM
}

といったエラー表示ルーチンは別に用意しておきます。

あとは、見栄えの問題として、ゲストユーザーの場合は書き込みフォームを消す。

if ($ENV{'REMOTE_USER'} ne "guest") {
print <<"EOM";
<FORM method="POST" action="bbs.cgi">
名前<input type="text" size="20" name="name">
    :
    :
<input type="submit" value="送信">
</FORM>
EOM
}

といった処理を付け加えればいいでしょう。

ただ、基本認証によるユーザー名の取得には、

比較的強力で破られにくい認証が出来る、

認証ルーチンを自分で作らなくてよいなどの利点がある一方で、

いくつかの制限事項もあります。

↓参考

http://sakaguch.com/PastBBS/0039/B0019463.html

そこで、一般的にはcookieを利用して

今ログインしているのは誰かを判別して、

それによって書き込み権限を与えるかどうかを決める、

といった手法が取られるのが普通です。

このへんは、探してみると色々な会員制掲示板CGIがありますから、

そういったものを参考にしてみてください。

◎質問者からの返答

>フォームを使わず直接POSTデータを送信されて

>きた場合でも、それを拒絶する仕組みを工夫し

>なければなりません。

なるほど。こういう知識が必要なんですね。コードもわかりやすくありがとうございます。感動しました。すごく勉強になるのでもう少し続けてみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ