SMSなどのサイトで、ログイン画面に「次回から自動的にログイン」というチェックボックスがよくありますが(このブログにもあります)、この仕組みはクッキーを使えば比較的簡単に実装できます。
ただし、クッキーにユーザー名とパスワードを書いてしまってはいけません(昔はそういうサイトが結構ありました)。クッキーはクロスサイト・スクリプティングなどの脆弱性によって、外部に漏れてしまう可能性がありますし、それ以前に自分の設定したパスワードがクッキー・ファイルに「ベタ書き」されているのをユーザーが見たら、それだけで気分を悪くするでしょう。
自動ログインには、ユーザー名やパスワードの代わりに、ランダムに生成した文字列(ここでは、これを自動ログインキーと呼ぶことにします)を使います。この文字列をサーバ側のデータベースと、ユーザー側のクッキーの両方に書き込んでおけば、これらを照合することによってユーザーを特定できるわけです。
自動ログインキーは偶然に重なったり、順番に試すことで当てられたりしないように、十分に長くする必要があります。自動ログインキーの一部にシリアル番号などを組み込むと、重複は防止できるでしょう。
気をつけなければならないのは、ユーザーがインターネット・カフェや学校などの共有のコンピュータでうっかり「自動ログイン」を有効にしてしまう可能性があることです。このようなユーザーのうっかりミスは完全には防止できませんが、一定時間の経過後に自動ログインキーを無効にしたり、定期的に自動ログインキーを更新するようにしておけば、ある程度は実害を抑えることができます。
Tomcatでクッキーを扱う方法については、拙著「Java+MySQL+Tomcatで始めるWebアプリケーション構築入門」に書いたので、こちらも参考にしていただければ幸いです。
ただし、クッキーにユーザー名とパスワードを書いてしまってはいけません(昔はそういうサイトが結構ありました)。クッキーはクロスサイト・スクリプティングなどの脆弱性によって、外部に漏れてしまう可能性がありますし、それ以前に自分の設定したパスワードがクッキー・ファイルに「ベタ書き」されているのをユーザーが見たら、それだけで気分を悪くするでしょう。
自動ログインには、ユーザー名やパスワードの代わりに、ランダムに生成した文字列(ここでは、これを自動ログインキーと呼ぶことにします)を使います。この文字列をサーバ側のデータベースと、ユーザー側のクッキーの両方に書き込んでおけば、これらを照合することによってユーザーを特定できるわけです。
自動ログインキーは偶然に重なったり、順番に試すことで当てられたりしないように、十分に長くする必要があります。自動ログインキーの一部にシリアル番号などを組み込むと、重複は防止できるでしょう。
気をつけなければならないのは、ユーザーがインターネット・カフェや学校などの共有のコンピュータでうっかり「自動ログイン」を有効にしてしまう可能性があることです。このようなユーザーのうっかりミスは完全には防止できませんが、一定時間の経過後に自動ログインキーを無効にしたり、定期的に自動ログインキーを更新するようにしておけば、ある程度は実害を抑えることができます。
Tomcatでクッキーを扱う方法については、拙著「Java+MySQL+Tomcatで始めるWebアプリケーション構築入門」に書いたので、こちらも参考にしていただければ幸いです。
投稿:竹形 誠司[takegata]/2008年 02月 12日 05時 38分
/更新:2008年 02月 19日 17時 58分