@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

パスワードリマインダの仕組み

1
投稿者投稿内容
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2006-08-03 20:51
msoです。


さきほど”こんなことできるよね?”って言われたのですが、
自分にはどうやってやるのかわからないので
相談にのっていただきたいと思っています。

現在、Linux、Apache、Tomcat、MySQL、JSP/ServletでWebシステムの
開発を行っています。
そこでパスワードリマインダーの機能として、
以下のようなことを行いたいと思っています。
#言いだしっぺの人曰く、どっかでやっている。  らしいです。

1:リマインダーの画面から自分のメールアドレス、もしくは
  登録時の携帯番号を入力し、Submitする。
2:DBから登録されているユーザを探し出し、ユーザIDを基に
  URLを作成し、メールでユーザに配信する。
  http://www.hoge.com/foohogehoge
 (注:イメージです)
3:ユーザはメールで受け取ったURLをクリックし、
  サーバにアクセスする。
  ApacheからTomcatへデータが渡されたときに
  foohogehogeを基にメールを受け取ったユーザであることを
  認識し、画面にパスワードを表示させる。


個人的にはGETを使うのかとおもったのですが、そんなことをやらなくても
できるということでした。

そこで質問をさせていただきたいのですが、
1:上記のようなことは実際にできるのでしょうか?
  また、出来るのであればググる際のキーワードとなるような
  単語をおしえていただけないでしょうか?
  正直、単語もわからないので調査できないというのが本音で、
  ここに泣きついています。
2:パスワードリマインダでメールにURLを付ける際に、
  http://www.hoge.com/?id=foo
  はなぜいけないのでしょうか?
  IDを実際にそのままのせるのは危ないのは理解できますが、
  http://www.hoge.com/?id=ハッシュした値
  であれば、それほど問題ないと思います。

お手数ではありますが、よろしくお願いします。







かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-08-03 21:33
GETってHTTPのGETですよね。
ならばメールのURLをクリックしてページを表示するなら
GETでリクエストを送ることになりますが、
何か難しいことでもありますか?認識の違いかな。。。

手法としては、
1.入力情報からユーザIDを取得する
2.一意となるキーを生成
3.有効期限を決める(システム日付+1日など)
4.ユーザIDとキーと有効期限をDBに格納
5.キーを含むURLを生成
6.URLと有効期限を表記したメール生成、送信
7.キーを含むURLでリクエストを受ける
8.キーでDBに問い合わせて有効期限内ならパスワード表示画面へ
という感じで実現できると思います。

URLにユーザIDを付けるのは確かに危険ですが、
不可逆かつIDの予想が難しいハッシュ値であれば問題ないと思いますよ。
ただし単純にハッシュ値を求めるだけでは、
コリジョンが発生する可能性がありますので、
DBに問い合わせるなどして一意になるように気をつける必要があります。
(有効期限管理を行うなら、有効期限内のキーで一意になればよい)
1

スキルアップ/キャリアアップ(JOB@IT)