ActionMailer密码安全性

jef*_*unt 10 security ruby-on-rails actionmailer

我是疯了,还是在实际(开发/生产)配置文件中保留ActionMailer的SMTP用户名和密码是个坏主意?似乎我应该将它存储在加密的地方,或者至少将它从我的Mercurial推送中排除.

现在,我只是在执行推送之前从源文件中删除密码,但是必须比我正在使用的方式更聪明.:)

也许我应该将它作为另一个用户(已经存储有加密密码)存储在我的数据库中并以编程方式获取它?

Jim*_*dra 12

使用未存储在存储库中的应用程序配置文件来存储敏感信息.我是这样做的:

  1. app_config.yml在您的config目录中添加一个.其内容如下所示:

    smtp_password: kl240jvfslkr32rKgjlk
    some_other_password: 34hg9r0j0g402jg
    and_so_on: lkn$@gJkjgsFLK4gaj
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用以下内容preinitializer.rbconfig目录中添加:

    require 'yaml'
    APP_CONFIG = YAML.load(File.read(RAILS_ROOT + "/config/app_config.yml"))
    
    Run Code Online (Sandbox Code Playgroud)
  3. 用密码替换APP_CONFIG变量中的值,如下所示:

    smtp_password = kl240jvfslkr32rKgjlk # old version
    smtp_password = APP_CONFIG['smtp_password'] # new version
    
    Run Code Online (Sandbox Code Playgroud)

确保您没有包含app_config.yml在您的存储库中,尽管您可能想要创建一个已签入的示例文件,只是为了显示其中应包含的内容的示例.部署应用程序时,请确保它app_config.yml存储在服务器上.如果您正在使用标准的Capistrano部署,请将该文件放在共享文件夹中并更新部署任务,以在当前版本的目录中为其创建符号链接.

  • 注意,在Rails 3中不再提供preinitializer.rb.有关解决方案,请参阅http://asciicasts.com/episodes/226-upgrading-to-rails-3-part-2 (2认同)