Очень тесно связаны: Как защитить строки без SecureString?
Также тесно связаны: Когда мне понадобится SecureString в. NET?
Чрезвычайно тесно связаны (OP пытается достичь чего-то очень похожего): C# & WPF - Использование SecureString для клиентского HTTP-пароля HTTP
.. NET Framework имеет класс с именем SecureString . Однако даже Microsoft больше не рекомендует его использовать для новых разработок. Согласно первым связанным вопросам и ответам, по крайней мере, одной из причин этого является то, что строка в любом случае будет находиться в памяти в виде открытого текста как минимум некоторое время (даже если это очень короткий промежуток времени). По крайней мере, один ответ также расширил аргумент, что, если у них все равно есть доступ к памяти сервера, на практике безопасность, вероятно, все равно срабатывает, так что это вам не поможет. (Второй связанный вопрос и ответ подразумевают, что даже обсуждался вопрос об удалении этого из. NET Core полностью).
При этом документация Microsoft по SecureString
не рекомендует замену, и консенсус по Похоже, связанные вопросы и ответы такого рода меры не были бы , которые полезны в любом случае.
Мое приложение, которое является ASP. NET Базовым приложением, делает обширным использование вызовов API для внешнего поставщика с использованием класса HttpClient
. Как правило, рекомендуется для HttpClient
: использовать один экземпляр, а не создавать новый экземпляр для каждого вызова.
Однако наш поставщик требует, чтобы все вызовы API включали наш API Ключ в качестве заголовка с указанным c именем. В настоящее время я надежно храню ключ, извлекаю его в Startup.cs
и добавляю его в заголовки нашего HttpClient
экземпляра.
К сожалению, это означает, что мой ключ API будет храниться в открытом виде в памяти в течение всего жизненного цикла. приложения. Я нахожу это особенно тревожным для веб-приложения на сервере; Несмотря на то, что сервер обслуживается корпоративными ИТ-отделами, меня всегда учили относиться даже к корпоративным сетям как к полузависимым средам и не полагаться исключительно на корпоративные брандмауэры для обеспечения безопасности приложений в таких случаях.
Есть ли у Microsoft рекомендуемая лучшая практика для подобных случаев? Это потенциальное исключение из их рекомендации против использования SecureString
? (Как именно это будет работать, это отдельный вопрос). Или ответ на другие вопросы и ответы действительно верен, когда я говорю, что мне не следует беспокоиться о строках открытого текста, подобных этой памяти?
Примечание: В зависимости от ответов на этот вопрос, я может опубликовать дополнительный вопрос о том, возможно ли вообще использовать что-то вроде SecureString
как часть HttpClient
заголовков. Или мне придется сделать что-то хитрое, например заполнить заголовок прямо перед его использованием, а затем сразу же удалить его из памяти? (Это создаст абсолютный кошмар для одновременных вызовов). Если люди думают, что я должен сделать что-то подобное, я был бы рад создать для этого новый вопрос.