前提
先日、以下の質問をさせていただきました。
phpでの認証について
その結果、phpでの認証に下記のページに書かれているセッション認証を使えば、
色々とうまくいくということが分かりました。
PHPによる簡単なログイン認証いろいろ
セッション認証について色々と調べましたが、腑に落ちない点や、
実装した際に不都合が生じる気がしています。
疑問に思ったこと
1. セッションIDについて
ログイン済みかどうかを下記のように判断していることが一般的なようです。
php
1!isset($_SESSION['username']
ここで、クライアント側で適当なセッションIDを用いて
usernameが保存されているセッションをCOOKIE?に故意に作成することができれば、
usernameの値さえ変えれば、好きなユーザーとしてログインした状態を作れるような気がしています。
そこで、セッションIDを生成したタイミングで、そのセッションIDをサーバー側で保持し、
毎回usernameとセッションIDを照合することで乗っ取りは防げるのではと思いました。
ただ、そこで2番目の疑問が生じました。
2. 複数端末でのログインについて
google, facebookなど、複数端末でログインできるようなサービスはたくさんあります。
上記のように、usernameとセッションIDを照合する仕組みで実装した場合、
ログインごとにセッションIDが変更されてしまうため、
端末Aでログイン後、端末BでログインをするとセッションIDが変更され、
端末Aはログアウト状態になってしまうと考えました。
そこで、usernameとpasswordによる認証が成功したタイミングで、
usernameとサーバー側で保持している文字列を使ってハッシュ値を生成すれば、
複数端末で同じハッシュ値が生成され、認証を行うことができるような気がしています。
ただ、これではハッシュ値が固定値となってしまうため、セキュリティ的に問題がある気もしています。
上記を踏まえて
以上のことから、現状ではusernameとサーバー側で保持している文字列からハッシュ値を生成し、
それを認証で使う方法が最も効果的なのではと考えています。
これに対して、問題があればご指摘をいただきたいです。
また、上記の記述の中に間違っている認識があれば教えていただきたいです。
まだまだ勉強を始めたばかりで、説明部分で意味が通じていない箇所もあるかと思いますが、
ご意見いただけると幸いです。
よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/14 12:16