Net Core Web API 2.2 Защита конфиденциальных данных - PullRequest
0 голосов
/ 26 февраля 2019

Я занимаюсь разработкой проекта .Net Core Web API 2.2 и стараюсь защитить его как можно лучше.Это приложение будет подключено к базе данных SQL, а также будет отправлять электронные письма с сервера, и поэтому я хотел бы выяснить, как можно защитить мои конфиденциальные данные (например, строку подключения, пароль базы данных или даже пароль электронной почты для SMTP).аккаунт).

Я прочитал, что хранить пароли в виде простого текста в вашем файле где-то нехорошо, и одним из лучших способов является использование некоторых функций Microsoft Azure (где выпредоставить какой-то ключ, и он возвращает вам действительный пароль), который я еще не использовал.Кроме того, у меня нет подписки на Azure, и в настоящее время я не хотел бы идти в этом направлении.

Еще один метод, предложенный некоторыми из вас, ребята, заключался в сохранении всего пароля в Переменные среды и просто укажите это в приложении.В настоящее время я изучаю эту опцию, так как мое приложение будет размещено на «виртуальном сервере Windows», к которому у меня нет прямого доступа, и, следовательно, трудно (без прямого доступа) попасть туда и настроить переменные среды (даже не уверенесли это было бы возможно).

Наконец, до сих пор наилучшим вариантом (в случае невозможности использования упомянутых выше переменных) было на самом деле хранить соединения и пароли непосредственно в appsettings.JSON файл, но для их хеширования и расшифровки во время выполнения.Этот вариант для меня, безусловно, возможен;однако я хотел спросить (хотя это может быть весьма субъективно), ребята, правильный ли это подход или я что-то упустил, что могло бы помочь мне лучше защитить свое приложение от внешних угроз.

Любойпредложения или советы были бы более чем оценены, так как я не знаю, что делать дальше.

PS Я использую VSTS-репозиторий для хранения всего кода приложения, что может быть (я предполагаю) причиной, почемулюди предлагают как минимум хешировать ваши пароли при хранении в appsettings.json

1 Ответ

0 голосов
/ 26 февраля 2019

Файл appsettings.json никогда не должен использоваться для секретов просто потому, что он предназначен для контроля версий.Одно это делает его плохим выбором.Однако в appsettings.json также нет возможности шифровать что-либо.Вы могли бы, я полагаю, зашифровать свои секреты с помощью других средств и просто поместить зашифрованный текст в appsettings.json вручную после факта, но тогда вам понадобится какое-то средство для расшифровки секрета позже, когда тогда потребуется раскрыть ваши средства шифрования (т.е.ваш личный ключ), который побеждает весь смысл.Короче говоря, не используйте appsettings.json.

Переменные среды являются компромиссным решением.Поскольку вы вручную устанавливаете их на сервере (не в своем контроле исходного кода), и они могут быть сделаны доступными только для определенных пользователей (ограниченный доступ), вы получаете некоторую степень безопасности.Тем не менее, они также хранятся в виде открытого текста, что означает, что если кто-то может получить доступ к серверу, чтобы просмотреть их, вся безопасность находится вне окна.Переменные среды также можно установить как часть конвейера CI \ D в DevOps (ранее VSTS), поэтому прямой доступ к серверу не обязательно является обязательным условием, если учетная запись службы, выполняющая развертывание, имеет необходимый доступ.

Azure Key Vault - рекомендуемый подход, поскольку он является единственным встроенным провайдером конфигурации, который поддерживает шифрование, то есть ваши секреты зашифрованы в состоянии покоя и в значительной степени защищены сквозным.Однако в хранилище ключей Azure нет ничего особенного, кроме его доступности.Вы можете использовать любой тип сервиса, который позволяет безопасно хранить секреты;вам может понадобиться написать свой собственный провайдер конфигурации, чтобы настроить его.

...