Django/Python/Heroku: как скрыть пароль в коде (альтернативы жесткому кодированию)

Недавно я сделал пользовательскую функцию отправки электронной почты, вот фрагмент:

def send_custom_email(recipient, custom_message):

    ...
    gmail_user = '[email protected]'
    gmail_pwd = 'mypassword'
    ...

Поскольку проект с открытым исходным кодом, я не хочу жестко задавать пароль, поскольку он будет храниться в открытом доступе на Github для всех. Есть ли способы скрыть этот пароль? Как именно мне это сделать? Примеры были бы полезны.


person ApathyBear    schedule 28.10.2014    source источник
comment
нет хорошего способа сделать это, вы должны планировать отсутствие пароля в исходном коде... по крайней мере, часть, которая хранится на github и открыта   -  person Anentropic    schedule 28.10.2014
comment
то есть, если он с открытым исходным кодом, вы, вероятно, хотите, чтобы люди использовали свой собственный пароль gmail, а не ваш... поэтому ваше приложение должно, возможно, получить пароль из переменной среды, или файла конфигурации, или чего-то предоставленного пользователем< /я>   -  person Anentropic    schedule 28.10.2014


Ответы (2)


Вы можете установить пароль как часть переменных среды для вашего приложения.

  1. Войдите в Heroku, выберите свое приложение.
  2. Нажмите «Настройки».
  3. Добавьте переменную конфигурации.

Это также можно сделать из командной строки с помощью:

heroku config:set YOUR_CONFIG_VALUE=whatever

Подробнее см. на странице https://devcenter.heroku.com/articles/config-vars. Информация.

person Brandon    schedule 28.10.2014
comment
Это хорошее решение, спасибо. Однако один вопрос: возможно ли иметь переменные env в среде разработки за пределами героку? Для целей тестирования или чего-то еще. Как, возможно, в venv? - person ApathyBear; 29.10.2014
comment
Всегда рад помочь. Вы можете посмотреть: github.com/kennethreitz/autoenv для установки переменных среды для каждого виртуального окружения. - person Brandon; 29.10.2014
comment
Это отображается в командной строке? Таким образом, пароль будет виден (возможно) любому пользователю, подключенному через SSH или подобное. Если вы размещаете IAAS, это отчасти приемлемо... даже если бы я не рекомендовал использовать службу, в которой администратор может видеть пароль в командной строке. По общему вопросу, как безопасно хранить пароль при его использовании (т.е. невозможно хеширование), посмотрите на это: -a-password-variable-in-a-java-web-application/25969056#25969056" title="различные способы хранения переменной пароля в веб-приложении Java"> stackoverflow.com/questions/25964435/ - person sc0p; 29.10.2014
comment
Спасибо, ребята, очень полезно. - person ApathyBear; 30.10.2014

Вы, вероятно, не хотите отправлять электронные письма таким образом. Но если вам необходимо это сделать, вам следует использовать функциональные возможности переменных конфигурации Heroku, чтобы скрыть конфиденциальную информацию из вашей кодовой базы: https://devcenter.heroku.com/articles/config-vars (есть пример на Python).

person Pierre Drescher    schedule 28.10.2014
comment
Как бы вы порекомендовали отправлять электронные письма? Я открыт для предложений :) - person ApathyBear; 29.10.2014
comment
Хорошей практикой является использование стороннего поставщика услуг электронной почты для отправки транзакционных электронных писем. Mailgun и Sendgrid — два популярных. - person Pierre Drescher; 30.10.2014
comment
Спасибо, я проверю их. - person ApathyBear; 30.10.2014