非常密切相关: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,至少有一个原因是,无论如何该字符串都将以明文形式存储在内存中至少[SecureString
上的文档不建议替代,并且在链接的“问答”上的共识似乎是,无论如何这种措施都不是全部有用。
我的应用程序是ASP.NET Core应用程序,它广泛使用通过HttpClient
类向外部供应商的API调用。 generally-recommended best practice的HttpClient
将使用单个实例,而不是为每个调用创建一个新实例。但是,我们的供应商要求所有API调用都包括我们的API密钥作为带有特定名称的标头。我目前安全地存储密钥,在Startup.cs
中检索它,并将其添加到我们的HttpClient
实例的标头中。
[不幸的是,这意味着我的API密钥将在应用程序的整个生命周期中以纯文本形式保存在内存中。我发现这对于服务器上的Web应用程序特别麻烦。即使服务器是由公司IT维护的,在这种情况下,我总是被教导甚至将公司网络视为半敌对环境,并且不仅仅依靠公司防火墙来确保应用程序安全。
Microsoft是否针对此类情况推荐了最佳实践?这是他们反对使用SecureString
的建议的潜在例外吗? (确切的工作方式是一个单独的问题)。还是说其他问答中的答案真的正确,是说我不应该担心像这样的内存中存在的纯文本字符串?
注意:
根据对这个问题的回答,我可能会发布一个后续问题,即是否甚至可以将SecureString
之类的内容用作HttpClient
标头的一部分。还是我需要做一些棘手的事情,例如在使用标题之前先填充标题,然后在之后将其从内存中删除? (尽管这将为并发呼叫造成绝对的噩梦)。如果人们认为我应该做这样的事情,我很乐意为此提出一个新问题。非常紧密相关:如果没有SecureString,如何保护字符串?也密切相关:什么时候在.NET中需要SecureString?密切相关(OP正在尝试实现某些目标...