- 締切済み
掲示板の管理者画面でログインを維持したい
管理者のみが入れる画面を作成しています。 書き込みの編集や、掲示板のデザインや設定を行う場所です。 クッキーを使わない方法を考えているのですが、 どのような方法でログイン状態を維持すればいいんでしょうか? 管理者画面に入るには、編集や設定の項目をラジオボタンで分けて、 テキストボックスに管理者パスワードそして送信ボタンでログインするようにしてます。 一回目は普通にログインできるのですが、例えば設定を変えたあとに更新すると 変数の中身が消えるのでログインが維持できない状態です。 これを維持する処理の流れを教えて欲しいです。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- galluda
- ベストアンサー率35% (440/1242)
がるです。んっと…ダメです(苦笑 まず、httpを含むTCP(のパケット)が盗聴可能である点が一点。 環境によっては、Proxyなどの中継サーバが存在し、そのあたりで抜かれる可能性が一点。 最後に、クライアントPC上のキャッシュなどから露見する可能性が一点。 おまけとしては、作り方によっては「認証を無視できる可能性」などが多々。 というわけで、あんまり好ましくないです。 通例、認証系は、極端に大雑把には、以下の流れになることが多いです。 ・IDとパスワードを入力 ・IDとパスワードをチェック(DBにあるなら、SQLインジェクションに注意) ・OKなら「ID、パスワードとは無関係な」セッションIDをランダムに作成 IDとセッションIDを1セットにしてDBにぶち込んでおく で、このセッションIDを使ってやり取りをします。 ただ、そのままだとやっぱりハイジャックされていまうので。 ・セッションIDは定期的に(せめて10~30分単位)変更する ・セッションIDそのものではなく、「セッションIDとランダムな文字列を含む」文字列とか、「セッションIDとランダムな文字列を含む文字列を暗号化した」文字列とかをやりとりする などの手法が必要になります。 このあたりは結構大変なので。 頑張ってください…とぶん投げるのもなんなので。またご質問いただければ、可能なかぎり返答を返したいと思います。
- galluda
- ベストアンサー率35% (440/1242)
がるです。なるほど状況は理解いたしました。 まず大前提として。最低限、一般にセッションIDなどと呼称される文字列を「どこかで」やり取りする必要性が、認証では出てきます。 これを「どんな風にやり取りするか」が、そのまま質問に対する回答になるのですが。 やはり一般的なのはCookieです。 次に「セキュリティに配慮しつつ」hidden。 <input type="hidden" name="sid" value="せっしょんID"> って感じの書式になります。少々手間なのですが、携帯電話系などでCookieが使えない環境では割合に用いられる手法です。 次に使われる、get系の、いわゆる「URLに付属されているパラメタ」ですが、これはセキュリティ的に危険なのでお勧めいたしません。 同様にNGなのがREFERERです。 稀に見る、最悪なケースがIPアドレスによる固定です。絶対にやってはいけませんが。 状態的には概ねこんな感じでしょうか?
お礼
返事遅れてすみません。一応自力で処理の形だけは実現できました。 ただセキュリティの面で自信がないですが・・・ 処理の流れとして、 フォームに入力したパスワードと管理者パスを比較 ↓ 照合して一致したら管理画面に入る。 同時に上記で照合した管理者パスワード($admin_pass)を管理者画面のvalue=\"$admin_pass\"に。 ※こんな感じで <input type=\"hidden\" name=\"bbs_conf_flg\" value=\"$admin_pass\"> ↓ 管理者画面の設定を更新した後に if ($form{'bbs_conf_flg'}) {&bbs_conf;}でまた呼び出している。 ※&bbs_confは管理者画面 パスワードが照合した時点で管理者の認証は通ったと言う意味で$admin_passをvalueに 指定してるんですが当然ソースに見えてます。 一応管理者が本人か照合してるわけなので見えても問題ないのですが 精神面でなんかスッキリしないってのはありますが・・・この処理のやり方ってまずいでしょうか?
- steel_gray
- ベストアンサー率66% (1052/1578)
クライアント側への保存(cookie)を嫌うなら、代わりにサーバ側にファイルとしてログイン情報等を保存する方法を採ります。 俗に「セッション管理」といい、 便利なモジュールも幾つかあります。 CGI::Session ←CPANからインストール Walrus::Session::Lite ←こちらはフォルダ/ディレクトリに置くだけ。 session セッション perl 等々適当に単語を組み合わせて検索してみると実践方法や留意点などがみつかります。
お礼
参考まで示していただいてありがとうございます。 いずれこういうやり方もやってみたいですね。
- galluda
- ベストアンサー率35% (440/1242)
がると申します。 とりあえずまず質問なのですが。「なぜCookieを使わない/使いたくない」のでしょうか? そこ次第で色々変わってくるので。
補足
すいません。特にこうだからという信念のようなものはないのですが、 クッキーを受け入れない設定にしてる場合にはどういう処理で出来るのかなと疑問に思ったのが理由です。
お礼
管理画面を維持するために使用していた管理者パスワード$admin_passの部分を、 ランダムな数値に変更しましたがこれでは問題は解決しないんでしょうね・・・ ちなみに”盗聴”の部分が私自身の経験が浅く、 イマイチどういった例があるか理解できませんでした^^;