Microsoft有推荐的方法来处理HttpClient标头中的机密吗?

问题描述 投票:1回答:1

非常密切相关:How to protect strings without SecureString?

也密切相关:When would I need a SecureString in .NET?

极其紧密相关(OP正在尝试实现非常相似的功能:C# & WPF - Using SecureString for a client-side HTTP API password] >>

。NET Framework具有名为SecureString的类。但是,即使Microsoft不再建议将其用于新开发。根据第一个链接的Q&A,至少有一个原因是,无论如何该字符串都将以明文形式存储在内存中至少[时间(即使是非常短的时间)。至少有一个答案还扩展了这样一个论点:如果他们无论如何都可以访问服务器的内存,则实际上安全性无论如何都可能遭到攻击,因此对您没有帮助。 (第二个链接的问与答意味着甚至有讨论将其完全从.NET Core中删除)。话虽这么说,微软在SecureString上的文档不建议替代,并且在链接的“问答”上的共识似乎是,无论如何这种措施都不是全部有用。

我的应用程序是ASP.NET Core应用程序,它广泛使用通过HttpClient类向外部供应商的API调用。 generally-recommended best practiceHttpClient将使用单个实例,而不是为每个调用创建一个新实例。但是,我们的供应商要求所有API调用都包括我们的API密钥作为带有特定名称的标头。我目前安全地存储密钥,在Startup.cs中检索它,并将其添加到我们的HttpClient实例的标头中。

[不幸的是,这意味着我的API密钥将在应用程序的整个生命周期中以纯文本形式保存在内存中。我发现这对于服务器上的Web应用程序特别麻烦。即使服务器是由公司IT维护的,在这种情况下,我总是被教导甚至将公司网络视为半敌对环境,并且不仅仅依靠公司防火墙来确保应用程序安全。

Microsoft是否针对此类情况推荐了最佳实践?这是他们反对使用SecureString的建议的潜在例外吗? (确切的工作方式是一个单独的问题)。还是说其他问答中的答案真的正确,是说我不应该担心像这样的内存中存在的纯文本字符串?

注意:

根据对这个问题的回答,我可能会发布一个后续问题,即是否甚至可以将SecureString之类的内容用作HttpClient标头的一部分。还是我需要做一些棘手的事情,例如在使用标题之前先填充标题,然后在之后将其从内存中删除? (尽管这将为并发呼叫造成绝对的噩梦)。如果人们认为我应该做这样的事情,我很乐意为此提出一个新问题。

非常紧密相关:如果没有SecureString,如何保护字符串?也密切相关:什么时候在.NET中需要SecureString?密切相关(OP正在尝试实现某些目标...

security asp.net-core encryption .net-core dotnet-httpclient
1个回答
4
投票
[首先,如果黑客获得对您的Web服务器的root访问权限,那么您遇到的问题要比被窃取的超级秘密Web应用程序凭据更大。方法,方法,更大的问题。一旦黑客站在密闭舱口的一侧,游戏就结束了。
© www.soinside.com 2019 - 2024. All rights reserved.