为什么要在Rails中动态生成secret_token.rb?

时间:2014-02-10 10:35:38

标签: ruby-on-rails security ruby-on-rails-4

在Hartl的教程中,他重写了secret_token.rb以动态生成秘密令牌。他为什么这样做?只要你没有版本控制它,将它存储在文件中有什么区别?

Hartl的secure_token.rb代码:

require 'securerandom'

def secure_token
  token_file = Rails.root.join('.secret')
  if File.exist?(token_file)
    # Use the existing token.
    File.read(token_file).chomp
  else
    # Generate a new token and store it in token_file.
    token = SecureRandom.hex(64)
    File.write(token_file, token)
    token
  end
end

SampleApp::Application.config.secret_key_base = secure_token

1 个答案:

答案 0 :(得分:4)

这很简单。有了这种令牌生成:

  1. 您的应用程序已准备好在任何计算机上进行部署(无需担心创建机密令牌文件等)。
  2. 即使你有权访问代码库,你仍然无法获得秘密令牌(例如,如果你将你的应用推送到GitHub)。
  3. 此外,您的应用程序的每个安装都将具有不同的秘密令牌。例如,这意味着来自开发机器的加密数据(例如密码)在生产应用程序中将毫无用处。
  4. 然而,显示如何生成秘密令牌足够危险。您使用的工具或库在任何给定的时间点都很容易受到攻击。