2013-09-22 5 views
5

私はここで説明するシステム使用して「私を覚えて」ユーティリティを実装しようとしています:Improved persistent login cookieの実装は、複数のデバイス間でトークンとシリーズで私を覚えて

は、しかし、ここで私のためのロジックに問題があるとしている場合思っていました誰も私のためにこれをクリアすることができます。

  • ユーザにセッションIDが与えられます。これはランダムに生成された文字列であり、ユーザーのアカウントの存続期間にわたって永続的なものです。 です。

  • ユーザーにはトークンIDが与えられます。これは、ユーザーが正常にログインするたびに再作成され、ランダムに生成された文字列と です。

これらの値の両方がユーザーのマシン上で、データベース内の署名クッキーとして保存されます。

アイデアは、誰かがユーザーのトークンとシリーズを偽装し、ユーザーとしてログインすると、新しいトークンIDを生成するという考え方です。正当なユーザーが次にログインしようとすると、一致するシリーズがありますが、無効なトークンがあり、システムにセキュリティ違反が発生したことを通知し、必要なアクションをとることができます(ユーザーのトークンをクリアします)。

これは素晴らしいです。しかし、ユーザーが複数のデバイスやブラウザからアプリケーションを使用しようとするとどうなりますか?ユーザーがChromeでサービスにログインし、私のことを覚えているとします。次回はFirefox経由でログインし、私も覚えています。新しいトークンが生成され、次回ユーザーがChromeでログインしようとすると誤った盗難が発生するようになります - いいえ?

この場合、どうすればこのソリューションをより確実に実装できますか?私は、Cookieに基づく認可は、その性質上安全性が低く、Cookieを許可されたユーザーが購入などの有害な行為を実行できないことを十分に認識しています。

答えて

4

「改善された永続的なログインクッキー」は参照元のポスト、(ここで見つける:http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/)は述べている:

クッキーがいくつか続い 区切り文字に続いてユーザーのユーザー名、で構成する必要があります

大規模な乱数(128ビット は容認できればぐっと大きくなっているようです)。サーバーは の番号 - >ユーザー名の関連付けのテーブルを保持しています。これは、クッキーの有効性を で確認するために検索されます。 Cookieが乱数と のユーザー名をテーブル内で相互にマップされている場合、ログインは となります。

任意の時点で、ユーザ名がそのようないくつかの番号にマッピングすることができる

ので、ユーザーは、同時に多くの永続的なトークンを持つことができます。

+1

ありがとうございました。私はたくさんのトークンを持っていて、それらに非使用時の30日間の有効期限を与えるので、私は冗長なデータでデータベースを満たしません。 –

関連する問題