使用SecureString进行配置实际上安全吗? - c#

在我的一篇代码回顾中,我偶然发现了SecureString的一个有趣实现。从逻辑上讲,将值隐藏在内存中是有好处的,但是我对IConfiguration的理解是,通过ConfigurationBuilder注入和构建时,内存中已经存在一个副本供使用。因此,尽管SecureString隐藏了明文值,但配置访问会自动否定密文。

我的想法正确吗,实际上该值是不安全的,甚至不应该使用SecureString,因为以-开始不安全-

public class Sample
{
     private readonly SecureString secret;
     public Sample(IConfiguration configuration) => secret = new NetworkCredentials(String.Empty,
          configuration.GetSection("Api:Credentials")["secret"]).SecurePassword;
}

参考方案

基本上在文档中提到:

总体而言,SecureString比String更安全,因为它限制了敏感字符串数据的公开范围。但是,这些字符串仍可能会暴露于有权访问原始内存的任何进程或操作,例如主机上运行的恶意进程,进程转储或用户可见的交换文件。建议不要使用SecureString保护密码,而是建议使用不透明的句柄处理存储在进程外部的凭据。

在某些平台上甚至没有实现。它甚至在某个时候在.net框架中变成了字符串,那么为什么在那儿呢?使用它有意义吗?

关于您的评论:

我的想法正确吗,实际上该值是不安全的,甚至不应该使用SecureString,因为开头不安全-

使用它确实有意义。将该值视为100%安全是没有道理的,它只是增加了一层安全性。

它确实限制了曝光,这是我们在安全编码时应努力的目标。

可以在以下出色答案中找到一些使用它的完全合理的理由:Is SecureString ever practical in a C# application?

我可以想到的另一种情况:如果您使用azure key vault之类的远程密钥存储,则使用它更为有意义。

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…

ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#

我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…

从Axios请求以ASP.NET Core API返回下载文件 - c#

大家好我正在尝试从Axios Request从ASP.NET Core Web API下载文件。这是我的示例API方法。 (基于此stackoverflow question的代码)[HttpPost("download")] public async Task<IActionResult> DownloadFile(){ .…

从.NET Core 2.1降级到.NET 4.7.1时,如何使用IApplicationBuilder和IServiceCollection? - c#

我不得不将我的项目从.NET Core 2.1更改为.NET 4.7.1,并且修复了几乎所有错误,但以下错误仍然困扰着我 “ IApplicationBuilder”不包含“ UseHsts”的定义,也找不到找不到接受类型为“ IApplicationBuilder”的第一个参数的扩展方法“ UseHsts”(是否缺少using指令或程序集引用?) “ IA…

使用.NET Core 2.2发送电子邮件 - c#

在MVC ASP.NET中,您可以像这样在web.config文件中设置smtp配置:<system.net> <mailSettings> <smtp from="MyEmailAddress" deliveryMethod="Network"> <network host=…