在 Devise 中使用明文电子邮件确认令牌的漏洞是什么?

What is the vulnerability in using a plaintext email confirmation token in Devise?

Devise 使用单向加密的电子邮件确认令牌。

这样做的用户体验成本是,如果发送新的确认电子邮件,那么如果用户碰巧找到旧电子邮件并单击 link,他们的令牌将无法使用。

Devise 使用单向哈希令牌避免的安全漏洞是什么?将明文令牌放入数据库有什么不安全之处?我唯一能想到的是,如果有人破坏了数据库,他们就可以找到令牌并错误地确认电子邮件。但是...

  1. 如果有人破坏了数据库,我认为此时需要担心更严重的问题
  2. 他们所能做的就是"falsely"确认他们无法控制的电子邮件地址。这样做有什么好处呢?更恶意的做法是切换帐户以使用攻击者控制的电子邮件地址。但是拥有明文确认令牌与此无关。

那么,加密令牌的用途是什么?

来自Devise 3.1 release announcement

In previous versions, Devise stored the tokens for confirmation, reset password and unlock directly in the database. This meant that somebody with read access to the database could use such tokens to sign in as someone else by, for example, resetting their password.

In Devise 3.1, we store an encrypted token in the database and the actual token is sent only via e-mail to the user.

至少,这就是 Devise 开发人员看到的原因。

关于您的#1:没有必要完全破坏数据库,只需读取对该特定数据子集的访问权限。这可以通过 SQL 注入、具有数据库访问权限的恶意内部用户或其他方式来实现。

关于你的#2:我不完全确定。他们可能希望在确认、重置和解锁令牌存储之间保持一致性。