Ruby on rails md5或urlsafe_base64或其他用于创建身份验证令牌

Ruby on rails md5或urlsafe_base64或其他用于创建身份验证令牌,ruby-on-rails,security,Ruby On Rails,Security,我有一个rails应用程序,我们使用user_id并写入会话变量(作为cookie)。我将在浏览器和移动平台上使用相同的令牌 生成身份验证令牌的首选方式是什么?我看到: token = Digest::MD5.hexdigest('some-value') # this token = SecureRandom.urlsafe_base64 # and this token = SecureRandom.hex # and this 是否有重要的理由使用其中一个而不是另一个 thx预先在Rai

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

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

token = Digest::MD5.hexdigest('some-value') # this
token = SecureRandom.urlsafe_base64 # and this
token = SecureRandom.hex # and this
是否有重要的理由使用其中一个而不是另一个


thx预先

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

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

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

随机输入法与纯随机令牌法没有什么不同,只是部分输入不是随机的


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

我通常只使用
token=SecureRandom.hex
来创建一个公共令牌。