2012-03-30 17 views
0

私のPHP codeigniterサイトは、3種類の電子メールをユーザーに送信し、HTML形式になっています。html電子メールのセキュリティで保護された「閲覧電子メールを表示する」リンク

どのようにすれば安全なリンクを作成できますか?電子メールの2は本質的に敏感です:

  1. 新規登録:電子メールは、その詳細とアクティベーションリンクを示し

  2. は峠を忘れた:電子メールは


を渡すリセットするためのリンクを示します これだけで十分ですか?:

$code = sha1(mt_rand(10000,99999).time().$user_email); 

$link = 'email/view/' . $code . '/' . $user_id . '/'; 

     => http://mysite.com/email/view/c0acc09c6d00b706e1e511e52f286b1859067047/213/ 


したがって、認証はランダムなハッシュとそのuser_idに基づいて行われます。それはまた、ユーザーIDをハッシュする価値がありますか?

+0

私はあなたが2つの異なることについて話していると思います。 1)ブラウザーにメールを表示する方法(これまで見たことのないオプション)と2)ユーザーを認証する電子メールにURLを提供する方法。私は後者があなたが本当に達成しようとしているものだと思います、そうですか? – Anthony

+0

引数なしで 'mt_rand()'を使用してください。そうすれば、99999の代わりに数十億の可能な数字を得ることができます。また、 'time()'の代わりに 'microtime()'を使うことで、予測不能なハッシュを得ることができます。可能なハッシュの数を増やすことがすべてです。 – kijin

+0

ありがとう、私はsha1(mt_rand()。microtime()。$ user_email)にハッシュを更新しました。 – Quadrant6

答えて

2

私はURLパラメータとしてuser_idを含めませんでした。私はハッシュを貼っています。

誰かがリンクにナビゲートするとすぐに、ハッシュはデータベースに格納されているものとクロスチェックされ、一致する場合は、その電子メールに関連付けられた情報(ユーザー名、電子メール)を取得します。フォームに記入すると、入力したデータに互換性があるかどうかを確認できます。

たとえば、ユーザーがパスワードを忘れた場合、自分の電子メールアドレスを入力するとすぐに、パスワードをランダムな値(ハッシュとして保存)にリセットし、この保存されたハッシュをURLパラメータとして使用します。電子メールをリセットします。

+0

Thx、私はユーザーIDがそれがユニークになることを保証していると思っていましたか?しかし、私はハッシュで電子メールを使用しているので、衝突がないはずです(電子メールは登録時に一意でなければなりません)。 – Quadrant6

+1

ええ、私は 'md5(time()。$ user_id)'を使っています。ハッシュが別のハッシュと同じである可能性が非常に低いと心配しているなら、 'time()'の代わりに 'microtime()'を使うことができます。 – hohner

0

これはうまくいくはずです。機密ページが表示されたら、もう一度そのハッシュを使用してページを削除するといいでしょう。メールを送信するときにハッシュデータベースに格納され、ページが表示されているときにハッシュが存在するかどうかをチェックし、ページビューを許可し、データベースからハッシュを削除して、ページが2度目に表示された場合にチェックに失敗するようにします。 (彼らはいつも同じリンクをその電子メールから2回見る必要はないと仮定して)。

+0

Thx、パスワードリセットの場合は1ビュー後に削除します。期限切れの日付は良いかもしれませんが、他のものは確かです。 – Quadrant6

+0

何かが何度も閲覧される場合は、本当に敏感であれば閲覧できるようになる前にログインさせるのが最善でしょう。 – BenOfTheNorth

+0

それは良い点です。 – Quadrant6

関連する問題