3

我有一个 Rails 应用程序,我们使用 user_id 并写入会话变量(作为 cookie)。我将为浏览器和移动平台使用相同的令牌。

生成身份验证令牌的首选方式是什么?我见过:

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

是否有重要的理由使用其中一个?

提前谢谢

4

1 回答 1

2

在 Rails 的上下文之外(因为我们在这里讨论的是一般的 Web 应用程序安全性),很容易辨别。

因此,使用 MD5,您有两种方法。要么是固定输入,要么是随机输入。为了便于讨论,任何包含随机组件(如附加随机属性的用户名)的输入都被认为是随机的。

固定输入法不好。原因是它最终会在某种程度上是可预测的。如果攻击者可以预测他/她的令牌(了解它是如何生成的),他可以使用它来攻击其他令牌。换句话说,对每个人来说都是糟糕的一天。

随机输入法其实和纯随机token法没什么区别,只是部分输入不是随机的。

所以我建议使用纯随机令牌。base64 或 hex 都可以,但令牌中至少应该有 128 位随机性(16 个字符),如果可以的话,还应该更多。一个好的基础是 256 位随机性,在 base64 中是 43 个字符......

于 2013-06-20T01:18:45.037 回答