#security #web
#Безопасность #веб
Вопрос:
Я создаю веб-приложение, которое будет отправлять электронные письма для подтверждения регистрации. Я буду использовать https://github.com/RGBboy/express-mailer . Я хотел знать, безопасно ли для меня отображать пароль электронной почты в коде и отправлять его на сервер (Heroku, AWS и т.д.), Где размещено приложение. Если нет, то какие альтернативные методы мне следует использовать, чтобы «скрыть» пароль?
Комментарии:
1. Одна вещь, которую я видел, например, в wordpress, заключается в использовании config.sample.php с пустыми значениями по умолчанию, а затем вы сохраняете «производственные» значения в config.php а затем добавьте этот файл в список игнорируемых файлов (.gitignore, я думаю? Я не знаю. Я никогда не использую git.)
Ответ №1:
Обычно считается плохой практикой хранить секреты открытого текста / учетные данные под управлением версиями. Поскольку это может привести к проблемам безопасности
Обычно такого рода информация задается как переменные среды. В Heroku есть довольно простой способ выполнить эту настройку. Вы можете либо использовать их веб-администратора, либо установить их через командную строку.
Что касается других случаев, таких как ваша настройка разработки, это может быть сделано с использованием .env
файлов, которые загружаются и их значения отображаются в вашем запущенном коде. Поскольку [express-mailer][2]
это узловое приложение, я предлагаю использовать какой-нибудь пакет npm, такой как dotenv
или node-env-file
автоматически выполнять эту загрузку.Я лично предпочитаю, dotenv
что, на мой взгляд, проще.
Вам также следует ознакомиться с этой статьей, касающейся использования .env
файлов. Основная идея заключается в том, чтобы ваш .gitignore
(или эквивалентный) файл мог игнорировать ваш .env
файл, таким образом гарантируя, что ваши секретные учетные данные никогда не будут введены в систему управления версиями. А затем настройте .env.sample
файл, чтобы показать разработчику, какие данные необходимо объявить в указанном .env
файле.
Пример:
.env
EMAIL=foo@bar.com
PASSWORD=AahUbf796
S3_TOKEN=ASVNS7843NCA87SDVNBRT9
.env.пример
EMAIL=<email to access the account>
PASSWORD=<secret password>
S3_TOKEN=<s3 token for application foobar>
Ответ №2:
Вы никогда не должны хранить секреты в системе управления версиями.
Одна из альтернатив (которая лично мне нравится больше всего) — это установка секретов в качестве переменных окружения для вашего приложения в вашей производственной среде. Heroku, я думаю, поддерживает это. Такой же подход используется, например, в Rails. «Секреты» разработки / тестирования (которые на самом деле не являются реальными учетными данными для чего-либо ценного), конечно, все еще могут храниться в вашей виртуальной машине.
Ответ №3:
Другой вариант — зашифровать учетные данные пользователя в вашем исходном коде и расшифровать их из вашего исходного кода.