Слишком многие ошибаются. Давай исправим.

Вы, наверное, уже видели, как это делали неграмотные сотрудники службы безопасности.

Вы понимаете, о чем я? Секрет в строке 4, который будет передан в репозиторий вашего кода.

Человек, который этим занимался, в основном, новичок в ASP.NET Core. Понятно, почему происходит нечто подобное. Это просто. Это делает процесс разработки приятным.

Однако это серьезный недостаток безопасности. Никогда не храните конфиденциальные данные в исходном коде.

Чуть более опытный разработчик, вероятно, сделает appsettings.Development.json. Это ничем не лучше, если вы на самом деле .gitignore этот файл.

Скрывайте свои секреты!

К счастью, эту проблему легко решить.

Не создавайте дополнительных настроек appsettings.SomeEnvironment.json. Вместо этого просто используйте appsettings.json по умолчанию в качестве шаблона того, что требуется приложению для работы.

Понимаете? Строка 4, секрета не предоставлено.

Используйте пользовательские секреты dotnet для защиты ваших конфиденциальных данных

Хорошо, теперь мы удалили проблему из нашего файла. Давайте разберемся, как безопасно заполнить ConnectionStrings:default.

В терминале на месте проекта напишите dotnet user-secrets init. UserSecretsId создается и сохраняется в вашем файле .csproj.

Далее просто написать dotnet user-secrets set "ConnectionStrings:default" "my_connectionstring”

Вот и все. У вас больше нет ошибочно конфиденциальных данных в исходном коде.

Что делать на производстве, спросите вы

В производственной среде вам понадобится appsettings.json со всеми конфиденциальными данными - или вы можете просто добавить их как переменные среды.

Еще лучший подход - использовать KeyVault, например Azure KeyVault. Это просто. Это безопасно. Нет оправдания, чтобы не использовать его. Но настройка KeyVault выходит за рамки этой статьи.

Resources for the curious
Microsoft documentation on Secrets Manager









Никлас Миллард работает в одной из консалтинговых компаний Big4 в Дании в качестве старшего консультанта по технологиям. В первую очередь он играет роль ведущего разработчика и архитектора решений в клиентских проектах.

Он занимается разработкой программного обеспечения для коммерческих клиентов и государственных учреждений, таких как Министерство обороны, Министерство образования, Министерство окружающей среды и продовольствия Дании, Национальная полиция, Датское агентство по рынку труда и найму и Ørstad.

Подключиться к LinkedIn