3

user_id を使用してセッション変数 (Cookie として使用) に書き込む Rails アプリがあります。ブラウザとモバイル プラットフォームで同じトークンを使用します。

認証トークンを生成する好ましい方法は何ですか? 私は見た:

token = Digest::MD5.hexdigest('some-value') # this
token = SecureRandom.urlsafe_base64 # and this
token = SecureRandom.hex # and this

どちらか一方を使用する重要な理由はありますか?

thx事前に

4

1 に答える 1

2

Rails のコンテキストの外では (ここでは一般的な Web アプリケーションのセキュリティについて話しているため)、見分けるのは非常に簡単です。

したがって、MD5 を使用すると、2 つの方法があります。固定入力またはランダム入力のいずれか。この説明のために、ランダムなコンポーネント (ランダムな属性が追加されたユーザー名など) を含む入力はすべてランダムと見なされます。

固定入力方式はダメです。その理由は、最終的にはある程度予測可能になるからです。攻撃者が自分のトークンを予測できる場合 (トークンがどのように生成されたかを知る)、それを使用して他のトークンを攻撃できます。言い換えれば、誰にとっても悪い日です。

ランダム入力メソッドは、入力の一部がランダムではないことを除いて、純粋なランダム トークン メソッドと実際には違いはありません。

したがって、純粋なランダム トークンを使用することをお勧めします。base64 または 16 進数のどちらでも問題ありませんが、トークン (16 文字) には少なくとも 128 ビットのランダム性が必要であり、可能であればそれ以上も必要です。適切なベースは 256 ビットのランダム性で、base64 では 43 文字です...

于 2013-06-20T01:18:45.037 に答える