1

システムにログインするための一意の URL を各ユーザーに提供したいとします。URL は次のようになります。http://example.com/login/a1b2c3d5e6

たとえば、文字列a1b2c3d5e6は 0 から 9 までの数字で小文字の英語のアルファベットを使用し、10 文字を含むため、この長さの文字列には 36^10 のバリエーションがあります。

素敵な短いハッシュ文字列を取得するには何文字を使用する必要がありますが、同時にブルートフォースが事実上不可能であることを確認するには? 大文字を使用する必要がありますか?

4

2 に答える 2

1

ここであなたが何をしているのかはわかりますが、衝突のリスクがあるハッシュなどは気にしません(微視的なチャンスです)。

次のことをお勧めします。

1. Take the user's ID from the database (which will obviously be unique)
2. base_convert it to base 36. (See: http://php.net/manual/en/function.base-convert.php)
3. Use the resultant string as your URL

結果は、一意で衝突防止であることが保証された非常に小さな文字列になります。

私の理解では、TinyURL などの URL 短縮サービスは、このメカニズムを使用して URL を生成しています。私は実際にこのサイトでそれを学びましたが、もうその他のスレッドへのリンクを見つけることができません. これを私に気づかせてくれた、私より賢い原作者に感謝します!

お役に立てば幸いです。

于 2011-03-17T18:26:30.207 に答える
1

ログイン URL が次の場合:

http://example.com/login/a1b2c3d5e6

その場合、私はその最後の部分については心配しませんが、最初の部分については心配します - http. ユーザーが安全でない http 経由で URL にアクセスしている場合、推測がどれほど困難であっても、盗聴は常に簡単です。あらゆる種類の認証済み接続に https を使用します。

また、この URL で何が得られるかについても説明していません。他の形式の認証の代わりにではなく、他の形式の認証と一緒に追加の予防措置として使用することを願っています。

そうは言っても、通常のユーザー/パスワードログインフォームがURLで正しいトークンが利用可能な場合にのみ機能するという考えであれば、システムのセキュリティを強化するだけで、決して弱くすることはできないと思います. これは、タマネギの追加の層のように機能する一種のセキュリティ対策です。弱い層であっても、タマネギはそれほど強くなくても強くなります. 他の形式の認証の代わりに使用しないでください。また、失敗したログイン メッセージにあまり役に立たないでください。アプリケーションは、URL が正しくなるまで URL が間違っていると言い、パスワードが間違っているなどと言うべきではありません。認証に失敗した理由を問わず、一般的なエラー メッセージは 1 つしか表示されません。

トークンの長さについては、10 文字が妥当と思われます。本当にランダムであること、またはユーザー名や秘密の値などの一意の値の暗号的に強力なハッシュであることを確認してください. すぐに使用できるソリューションが必要な場合は、HMACを使用できます。HMAC-SHA1 を使用すると、トークンごとに 20 バイトが得られます。これは 40 桁の 16 進数で、最初の 10 桁または 20 桁のみを使用するか、または Base64 や Base32 などの形式としてエンコードすることができます。

このトークンは変更可能である必要があり、忘れた人に思い出させるメカニズムが必要になることに注意してください。

これらすべてを考慮すれば、認証の追加メカニズムとして使用しても害はないと思います。

于 2011-03-18T00:23:18.500 に答える