Защита паролем ActionMailer - PullRequest
10 голосов
/ 03 марта 2010

Я сумасшедший, или это плохая идея, чтобы сохранить имя пользователя и пароль SMTP для ActionMailer в текущем (конфигурационном / производственном) конфигурационном файле? Похоже, я должен хранить это в зашифрованном месте или, по крайней мере, исключить его из моих ртутных толчков.

Прямо сейчас я просто удаляю пароль из исходного файла перед выполнением push, но должен быть более умный способ, чем тот, который я использую. :)

Возможно, мне следует сохранить его в своей базе данных как другой пользователь (который уже хранится с зашифрованными паролями) и получить его программно?

Ответы [ 2 ]

12 голосов
/ 03 марта 2010

Используйте файл конфигурации приложения , который не хранится в вашем хранилище для хранения конфиденциальной информации. Вот как я это сделал:

  1. Добавьте app_config.yml в каталог config. Его содержимое будет выглядеть так:

    smtp_password: kl240jvfslkr32rKgjlk
    some_other_password: 34hg9r0j0g402jg
    and_so_on: lkn$@gJkjgsFLK4gaj
    
  2. Добавьте preinitializer.rb в каталог config со следующим содержимым:

    require 'yaml'
    APP_CONFIG = YAML.load(File.read(RAILS_ROOT + "/config/app_config.yml"))
    
  3. Замените ваши пароли на значения в переменной APP_CONFIG, например:

    smtp_password = kl240jvfslkr32rKgjlk # old version
    smtp_password = APP_CONFIG['smtp_password'] # new version
    

Убедитесь, что вы не включили app_config.yml в свой репозиторий, хотя, возможно, вы захотите создать проверенный файл примера, просто чтобы показать пример того, что должно быть в нем. При развертывании приложения убедитесь, что на сервере хранится app_config.yml. Если вы используете стандартное развертывание Capistrano, поместите файл в общую папку и обновите задачу развертывания, чтобы создать символическую ссылку на нее в каталоге текущего выпуска.

1 голос
/ 15 августа 2011

Ответ Джимми идеален (+1), я также хотел бы отметить, что Github рекомендовал файлы .gitignore для каждого языка, а для Rails - здесь Обратите внимание, что он включает config / *. Yml, так что Файл config / yml находится в репозитории для начала. Наверное, хороший ход.

Используйте Capistrano для запроса этих вещей при развертывании: настройте так же, как вы должны делать для своей базы данных:

task :my_silly_task do 
    sendgrid_password = Capistrano::CLI.password_prompt("Sendgrid password: ")
    require 'yaml'
    spec =  {... whatever yaml you need -- probably what Jimmy said...}
    run "mkdir -p #{shared_path}/config" 
    put(spec.to_yaml, "#{shared_path}/config/mailer_config.yml") 
end
...