2016-12-19 49 views
0

我在Rails 4.2应用程序中使用Devise 3.5。我用自定义HTML电子邮件覆盖了所有的股票电子邮件。由于我设计电子邮件传递代码的方式,电子邮件模板无法访问令牌的散列版本,例如reset_password_token在自定义电子邮件中发送unhashed设计reset_password_token

我遇到的问题是电子邮件模板只能访问存储在数据库中的非哈希标记。我试过在电子邮件模板中使用数据库中的非哈希标记,但是当用户单击链接时,Devise的PasswordsController#update调用resource_class.reset_password_by_token(resource_params)Devise::Recoverable然后取消标记并尝试查找该用户。这会失败,因为未经哈希的标记与数据库中的标记不匹配(因为标记已经以非哈希开头)。

我的问题是由三部分组成:

  1. 什么是发送电子邮件中的散列的令牌,如密码重置邮件的安全问题?
  2. 我假设发送unhahed的令牌是一个坏主意。如果是的话,我可以通过覆盖PasswordsController#create来解决这个问题,这样我就可以拦截散列和未散列的标记并将两者都保存到数据库,因此可以将散列标记用于我的邮件代码?在尝试这种方法之前,我应该注意到安全含义?
  3. 是否有某种方法可以在呈现我的电子邮件模板之前取出非哈希标记并对其进行哈希处理,以便我可以避免将其保存到数据库的黑客解决方法?

回答

0

你的假设是不正确的。未经哈希的令牌安全地发送电子邮件,但不安全存储在数据库中。这样有人访问您的数据库就无法重建密码重置URL。

所以你希望电子邮件只能访问非哈希标记。

有关更详细的讨论,请参阅在http://blog.plataformatec.com.br/2013/08/devise-3-1-now-with-more-secure-defaults/

+0

我看到“消化储存在数据库中标记”,所以我混合了散列VS散列的。我仍然有同样的问题。缩短的(未刷新的)令牌应该是电子邮件中的内容,因为Devise会尝试对其进行散列,然后将输出与数据库中的内容进行匹配。 – ACIDSTEALTH

+0

编辑链接到参考 –

+0

它应该在'@ token'的视图中可用,但是你说你重新设计了它,所以在不知道你重新设计的细节的情况下,我不能说你如何得到'@token '放到你需要的范围 –

相关问题