Пишу приложение asp.net core MVC. Необходимо хранить пароль от почты для SMTP. Для каждого пользователя своя почта и свой пароль. Возник вопрос, где и как безопасно хранить эти данные и строку подключения к бд?
Есть такой свод рекомендаций, который называется Двенадцать факторов.
Там рекомендуют строки подключения к БД хранить в переменных окружения. Этот способ поддерживается в Heroku и Azure, наверное, и в других облачных хостингах тоже.
Альтернатива: использовать скрипт развёртывания, который будет загружать код из репозитория git/mercurial на сервер, а потом будет трансформировать конфигурационные файлы, которые должны храниться в одном из стандартных форматов: XML, JSON, YAML. Этот способ не так безопасен, как первый.
Что касается паролей пользователей от внешних сервисов, их, к сожалению, придётся хранить не в виде хэшей. В целях безопасности код приложения может шифровать пароли перед записью в базу и дешифровывать при чтении.
Это позволит защитить пароли, если злоумышленник получит код приложения и содержимое базы, но не будет знать ключей шифрования, которые будут храниться в переменных окружения.
Этот способ подходит в случае, если у вас множество пользователей в базе, и для каждого надо хранить SMTP/login/password. Если эти пользователи кто-то вроде администраторов или роботов, и их всего 2–3, используйте рекомендации Двенадцать факторов.
Если у вас Core - то родной способ хостинга для вас - Docker / Kubernetes или Azure Web Apps.
Стандартный способ спускания конфигурации и в Azure и в Docker - через переменные окружения.
В случае Kubernetes - есть секреты, которые спускаются в поды через те же переменные окружения.
Продвижение своими сайтами как стратегия роста и независимости