2012-06-09 2 views
9

これは別の質問のブランチです: What is the best way to implement "remember me" for a website?ログインしたままにするベストプラクティス:Cookieのユーザー名はどのようにしてより安全になりますか?

トップの答えはこれを実装することです: http://jaspan.com/improved_persistent_login_cookie_best_practice

要約:

シリーズトークンとして乱数を使用し、別のログイントークンとして使用します。 ログインしたままの状態のCookieに、ユーザー名とともにそれらを配置します。 2番目の通常のセッションCookieを割り当てます。ユーザがセッションクッキーなしで に到着するたびに、ログインしたままのクッキーを消費します。新しく を発行してください。今度は新しいランダムログイントークンを使用して、シリーズ トークンを同じにしておきます。

なぜユーザー名が含まれますか?それはどのように役立っていますか?シリーズトークンは、ユーザーとシリーズを識別するのに十分なものでなければなりません。このアプローチでは、攻撃者がすべてのユーザー名を推測して一度にサイトにヒットし、全員をログアウトさせるDoS攻撃を防ぐために、この方法でシリーズトークンが追加されました。しかし、なぜユーザー名をまったく残すのが理にかなっていますか?

+2

ユーザー名を含むAFAICTは2つのことを行います。まず、ランダムなシリーズトークンを送信することで、DoSに記憶されたログインが難しくなります。 (DoSは有効なシリーズトークンとペアリングされたユーザ名を推測する場合にのみ成功します)。第2に、ユーザ名は、異なるユーザに発行されるシリーズトークン間の無差別な衝突を防ぎます。ユーザ名がなければ、シリーズトークンの衝突は盗難のように見えます。もちろん、すべての新しいシリーズトークンが以前に発行されたすべてのシリーズトークンの中でユニークであることを保証できれば、これは問題ではありません。 – ottomeister

+0

これはこれまでのところ最大の意味を持っています。シリーズトークンの一意性を確認することができない非常に分散したシステムでは、なぜユーザー名か、私が望むのは、ユーザー名のハッシュを含めることができます。しかし、シリーズトークンがユニークであれば、ユーザー名を潜在的な攻撃者から奪うこともできます。 –

+0

整数と文字列検索のパフォーマンスのために、ユーザー名の代わりにユーザーIDを使用する方が良いですか? – axelbrz

答えて

0

新しいセッションCookieを発行する前に、ユーザー名と番号がサーバー上でペアとして参照されます。ユーザー名がなければ安全性は低くなり(番号を盗んだ場合は別のユーザーを使って再生することができます)、ルックアップが難しくなります。

+3

1)ルックアップは難しくありません。シリーズトークンは一意の数字です。安価な検索です。 2)どのように別のユーザーと再生することができますか?彼らは別のシリーズトークンを持っています。失敗した攻撃のために一連のトークンが取り消されると、シリーズトークンは乱数と同じくらい便利です。 –

0

私の推測はこれです:

ユーザー名は監査用です。クライアントが認証のためにトークンと一緒にクライアントを送信する必要がある場合は、どのユーザーが認証を試みるかを知っています。これはあなたが間違ったトークンに何らかのやり方で反応することを可能にします。

認証中にトークンを尋ねるだけの場合は、どのユーザーが実際に試行しているのかわからないし、試合では誰かにアクセス権を与えても何の失敗もできません。誰かが盲目的にそれらを乗ろうとすることができます。

これを念頭において、ユーザー名とトークンの両方を使用して解決しましょう。トークンが間違っている場合、そのユーザーの他のすべてのトークンを削除できます。しかしそれはDOSにシステムを開く。攻撃者は自由に誰かをログアウトすることができます。だからそのシリーズのために追加されます。

ユーザー名を指定する必要はありません。ユーザーを識別できるようにするいくつかの情報も機能します。

関連する問題