phpのセッションを用いたログイン処理についての質問です。バージョンは5.2.8。

ログインが成功するとセッションにユーザー名を記録し、ログインしているかどうかは各ページでsession_is_registered()を用いてユーザー名があるかどうか判断するphpをincludeして調べています。
が、何だか頼りない気がします。
セキュリティ面では大丈夫なのでしょうか?
色々調べてみるとセッションIDを管理するDBがあったほうが良いとか・・・。
一般的に(例えば、"はてな"とか)はログイン処理はどのように行っているのでしょうか?
 
また、session_set_cookie_params()はすべてのsession_start()の前に記述しなければならないのですか?
情報をお願いします。

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:
  • 終了:2009/03/30 01:26:30
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:atrem No.1

回答回数4ベストアンサー獲得回数0

ポイント24pt

HTTPでセッションIDを利用したシステムで、セキュリティ上の不安で真っ先に思いつくのは、セッションIDが盗まれることでしょうか?

もし、セッションIDが盗まれたとしたら、サーバ側でやれることはない気がします。

セッションIDはブラウザとWEBサーバとの間でやり取りされるものです。

対策としては、HTTPSを使う(暗号化)。セッションIDを毎回変える。などでしょうか。

こちらのサイトが非常に参考になります。

@IT:Webアプリケーションに潜むセキュリティホール(3)

id:yuki_28s

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

質問が曖昧でしたね。申し訳御座いませんでした。

どちらかと言えば、セッションに変数を定義しているかどうかでログインを判断するということが心配でした。

後は、ユーザー名を直接代入している点とか・・・。

2009/03/26 15:49:22
id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント28pt

大丈夫ではありません。


生のユーザー名をsessionに登録するということは、簡単に“なりすまし”ができてしまうためです。最悪の場合、セッションハイジャックされます。

「はてな」がどうなっているか知りませんが、一般的には下記のような方法をとります。

  1. ユーザー名をハッシュ化してsessionに登録する
  2. サーバ側でユニークな文字列を発生し、sessionに登録する

セッションIDを管理するDBがあったほうが良いとか

上記のように、セッションIDからユーザー名を類推されないようにされていないと、ファイルで管理しようがDBで管理しようが、リスクは同じです。むしろ、SQLインジェクション対策が行われていないDBではリスクが高まってしまいます。


session_set_cookie_params()はすべてのsession_start()の前に記述しなければならないのですか?

sessionを cookie で管理しているのであれば、その通りです。


参考サイト

id:yuki_28s

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

参考にさせて頂きます。

2009/03/26 20:43:14
id:hijk05 No.3

回答回数1307ベストアンサー獲得回数23

ポイント10pt

>ログインが成功するとセッションにユーザー名を記録し、ログインしているかどうかは各ページで

>session_is_registered()を用いてユーザー名があるかどうか判断するphpをincludeして調べています。

>が、何だか頼りない気がします。

>セキュリティ面では大丈夫なのでしょうか?

SSLがかかってるのなら大丈夫でしょう。

あと、重要な処理の局面では、再度、ユーザー名とパスワードを入力させます。

http://q.hatena.ne.jp/answer

id:yuki_28s

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

2009/03/27 01:36:55
id:shotets No.4

回答回数42ベストアンサー獲得回数2

ポイント28pt

私の場合はログインしているかどうかのセッション情報のほかに

HTTP_USER_AGENT などのブラウザ情報やホスト情報が一致するかどうかの判別をしています。

HTTP_USER_AGENT なども偽装できるそうなのでセキュリティは万全ではないですが、

ログインしているかどうかの情報だけよりは良いと思います。

pahoo さんの「サーバ側でユニークな文字列を発生し、sessionに登録する」というのは

ユニークな文字列の作成方法が分からなければ偽装しようがないので

もっといいと思います。(私も勉強になりました。)

http://hoge.hoge/

id:yuki_28s

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

ブラウザ情報やホスト情報を使うアイディアは面白いと思います。

参考にさせて頂きます。

2009/03/27 21:59:08

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません