自動ログイン機能は便利ですが、
自動ログイン機能を実装する場合、
間違った自動ログインの実装方法
- セッションIDクッキーの有効期限を長くする
- 固定の自動ログイン鍵をクッキーに保存する
- 自動ログイン鍵をすべてのページで送信する
自動ログインの実装にはセッションID以外の予測不可能なランダム文字列を利用します。複数のWebブラウザから自動ログインできるようしたい場合、
正しい自動ログインの疑似コードは次のようになります。
//自動ログイン鍵が設定され、その鍵が有効化か?
if ($_COOKIE['auto_login_key'] &&
auto_login_key_is_valid()) {
update_auto_login_key(); // 自動ログイン鍵を更新
do_login(); // ログイン処理を行う
}
ログインするスクリプトが
http://example.jp/login/
に保存されている場合、
自動ログインを実装した場合、
対策のまとめ
- 自動ログインが必要ない場合は実装しない
- セキュリティが重要なサイトでは自動ログインは実装しない
- セッション管理用のクッキーに有効期限を設定した疑似自動ログインを実装しない
- 自動ログイン用の鍵はセッションIDとは別に用意する
(別のクッキーを利用する) - 自動ログイン用の鍵はログインするたびに更新する
- 自動ログイン用の鍵はログイン処理するページ以外は送信されないようにする
(クッキーのパスを設定する) - 自動ログイン用の鍵は必ずランダムな文字列だけを利用する
- 自動ログイン用の鍵は使用されるたびに更新する
(新しい鍵を発行し、 古い鍵は無効にする)