Bcrypt伸展(与Devise)和Heroku dynos

时间:2017-11-17 16:08:17

标签: ruby-on-rails heroku devise ruby-on-rails-5 bcrypt

我目前正在审核使用Devise生成的管理模型的安全性。它引发了很多关于Heroku的web dyno如何处理密码登记的问题。

第一个问题:

我对bcrypt成本的默认设计设置是config.stretches = Rails.env.test? ? 1 : 11这是否意味着测试环境有11个延伸?似乎默认的延伸是11,我可以确认我在开发环境下的哈希值也是11。那么为什么要指定11进行测试?

我打算用config.stretches = 12

加注到12

第二个问题:

如果我举起拉链,加密时间会增加。它会冻结我的应用并阻止其他访问者向应用发出http请求吗?可以对Web dyno进行多少并发http请求,以及还可以对Web dyno进行多少并发密码加密(如果这是不同的)。

我对dynos的了解并不深,但我知道一个工作人员dyno可以根据处理器内核对多个Sidekiq工作者进行线程化。虽然dyno没有指定核心数量,但我不知道这是否适用也是网络dynos。

基本上我知道提高strectches会增加加密时间,但它会影响整个应用效率吗?

3 个答案:

答案 0 :(得分:1)

config.stretches = Rails.env.test? ? 1 : 11将仅使用1进行测试,否则为11.这是为了加快测试速度,因为在测试环境中确保密码安全没有任何意义。

如果您打算使用12,请使用config.stretches = Rails.env.test? ? 1 : 12

更多延伸需要更多计算。通常情况下,这不会是性能问题,除非您发现真正的问题,否则不要优化或专注于此。

答案 1 :(得分:1)

配置中的那一行是

的缩写
if Rails.env.test?
  config.stretches = 1
else
  config.stretches = 11
end

即。在测试中,config.stretches为1,其余时间为11。

增加延伸次数确实会增加散列密码所需的时间。延伸参数以指数方式增加时间:将时间从11更改为12会使时间增加一倍,因此可以减少应用程序可以处理的请求数。

但是,通常只会在用户设置密码或登录等操作期间产生此费用,这通常只是整体请求的一小部分。

答案 2 :(得分:1)

此处devise-async-stretch的作者。它是为在后台作业队列中进行密码扩展而构建的。

我不再主动使用它(或维护它),并且只有在您使用SSL保护redis连接(大多数后台处理器所依赖的)时,才会鼓励它使用。

https://github.com/danielwestendorf/devise-async-stretch