安全机密管理:Asp.Net Core中的本地敏感数据保护技巧

这篇具有很好参考价值的文章主要介绍了安全机密管理:Asp.Net Core中的本地敏感数据保护技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在我们开发过程中基本上不可或缺的用到一些敏感机密数据,比如SQL服务器的连接串或者是OAuth2Secret等,这些敏感数据在代码中是不太安全的,我们不应该在源代码中存储密码和其他的敏感数据,一种推荐的方式是通过Asp.Net Core机密管理器

机密管理器

ASP.NET Core 中,机密管理器通常指的是一种工具或机制,用于安全地存储和管理应用程序中的敏感数据,如数据库连接字符串、API 密钥、密码等。这样的工具可以帮助开发人员有效地管理敏感信息,避免将其硬编码在代码中或与源代码一同提交到版本控制系统中,从而提高数据安全性和保密性。

通过上面我们可以得知,应用机密存储和项目数在不同的位置,也就是说不被 git 等源代码管理器所管理,所以不会随源代码迁入到远程服务器。

为什么要使用机密管理器:

  • 安全性:通过使用机密管理器,可以将敏感数据存储在安全的位置,避免在代码中明文存储密码等敏感信息,从而减少数据泄露的风险。

  • 便捷性:机密管理器提供了方便的方式来存储和访问敏感数据,使开发人员能够轻松地在开发过程中使用这些数据,而无需担心泄露或不当处理。

  • 灵活性:通过机密管理器,可以轻松地在不同环境中管理不同的敏感数据,如开发、测试和生产环境,同时确保每个环境中的数据安全性。

  • 遵循最佳实践:使用机密管理器有助于遵循最佳实践,如将敏感数据与应用程序代码分离、避免硬编码密码等敏感信息,提高应用程序的安全性和可维护性。

如何启用机密存储

有两种方案第一种是使用CLI第二种是使用Visual Studio

我们创建一个新的WebApi 项目dotNetParadise.UserSecret

使用CLI

机密管理器工具包含一个 init 命令 用来启用机密存储,在项目所在的目录,在我的示例中就是Api项目dotNetParadise.UserSecret的所在目录执行一下命令:

dotnet user-secrets init

安全机密管理:Asp.Net Core中的本地敏感数据保护技巧

通过输出我们可以看到在我们项目的CSPROJ文件生成了一个UserSecretsId 元素添加到项目文件的 PropertyGroup 中,内部文本是任意的,但对于项目来说是唯一的。

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>c3cda712-dc63-439b-b6af-9c4d6060fde2</UserSecretsId>
  </PropertyGroup>

设置机密

使用 dotnet user-secrets set 命令来存储机密数据。

在项目文件夹目录中执行此命令

dotnet user-secrets set "Movies:ServiceApiKey" "12345"

在这个示例中,使用 dotnet user-secrets set 命令设置了一个名为 "Movies:ServiceApiKey" 的应用机密,其值为 "12345"。冒号表示 "Movies" 是具有 "ServiceApiKey" 属性的对象文字。

我们设置好的机密数据存到了哪里?

Windows系统中

%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json

比如我刚才添加的就在机密存储位置:

%APPDATA%\Microsoft\UserSecrets\c3cda712-dc63-439b-b6af-9c4d6060fde2\secrets.json

安全机密管理:Asp.Net Core中的本地敏感数据保护技巧

看一下里面的内容

{
  "Movies:ServiceApiKey": "12345"
}

也可以通过单击该项目(项目名称),然后从上下文菜单中选择“管理用户机密”设置,在VS编辑器查看secrets.json机密数据。

--project 属性

除了在项目文件目录中执行dotnet user-secrets set命令设置机密之外,还可以在通过 --project 选项用于指定项目文件所在的文件系统路径,以便在其他目录中使用User Secrets机密管理器工具,这种用法允许从任意目录设置应用机密,而不仅限于项目文件所在的当前目录

dotnet user-secrets set "Movies:ServiceApiKey" "12345" --project "C:\apps\WebApp1\src\WebApp1"

机密管理器工具不会加密存储的机密,不得被视为受信任的存储,它仅用于开发,密钥和值存储在用户配置文件目录中的 JSON 配置文件中。

使用Visual Studio

当在 Visual Studio 中进行敏感数据管理时,可以按照以下步骤操作:

  • 在解决方案资源管理器中右键 单击该项目(项目名称),然后从上下文菜单中选择“管理用户机密”

  • Visual Studio 将自动为该项目添加一个 UserSecretsId 元素,其中填充有一个唯一的 GUID

安全机密管理:Asp.Net Core中的本地敏感数据保护技巧

设置完之后在 VS 的编辑界面就会打开一个secrets.json文件

{}

这里面是一个空的 json 串,可以手动设置机密键值对象,也可以通过dotnet user-secrets set来设置机密数据

批量设置机密

可以通过一个json文件来批量设置机密

type .\input.json | dotnet user-secrets set

读取机密

Asp.Net Core 中我们在项目中读取配置如appSetting.json或者环境变量的参数都是通过IConfiguration对象来操作,机密的读取和Asp.Net Core的配置都是一样的我们来实战一下

var apiKey = builder.Configuration["Movies:ServiceApiKey"];
Console.WriteLine(apiKey);

安全机密管理:Asp.Net Core中的本地敏感数据保护技巧

可以看到机密信息已经正常读到。

配置的优先级

那么如果 user-secretsappSetting.json或者还有其他的配置源设置相同的数据,那个优先级高呢?

根据Asp.Net Core 配置介绍

WebApplication.CreateBuilder 使用预配置的默认值初始化 WebApplicationBuilder 类的新实例。 经过初始化的 WebApplicationBuilder (builder) 按照以下顺序为应用提供默认配置(从最高优先级到最低优先级):

  • 使用命令行配置提供程序通过命令行参数提供。
  • 使用非前缀环境变量配置提供程序通过非前缀环境变量提供。
  • 应用在 Development 环境中运行时的用户机密。
  • 使用 JSON 配置提供程序通过 appsettings.{Environment}.json 提供。 例如,appsettings.Production.jsonappsettings.Development.json
  • 使用 JSON 配置提供程序通过 appsettings.json 提供。

可以看出如果用户机密比默认的 appsettings.json 优先级要高。

对应机密的绑定成POCO对象和 Asp.Net Core 使用配置一样可以用IConfiguration提供的各种扩展如Get,Bind等来实现,此处不过多介绍

列出机密

从所在项目目录中运行

dotnet user-secrets list

输出:

Movies:ServiceApiKey = 12345

删除单个机密

dotnet user-secrets remove Movies:ServiceApiKey

使用 dotnet user-secrets remove 命令来删除 ASP.NET Core 项目中的单个机密。在这个示例中,执行命令 dotnet user-secrets remove Movies:ServiceApiKey 将删除名为 "Movies:ServiceApiKey" 的机密信息。

通过这种方式,你可以方便地管理和更新项目中的机密数据,确保不再需要的敏感信息不再存储在用户机密存储中。

删除所有机密

dotnet user-secrets clear

dotnet user-secrets clear 用于清除 ASP.NET Core 项目中存储的所有用户机密。执行这个命令将删除用户机密存储中的所有机密信息,使存储中不再包含任何敏感数据。

使用 dotnet user-secrets clear 命令是一种快速清除整个用户机密存储中数据的方式,适用于需要重置或清除所有敏感信息的情况。请谨慎使用此命令,确保在执行之前备份重要的机密数据。

最后

面向非Web的环境,可以参考下方官网的实现,本文注重讲解了通过user-secrets来管理本地的机密,线上环境的机密配置可以ASP.NET Core 中的 Azure Key Vault 配置提供程序,或者大家如果在k8s的环境中可以通过Secret或者ConfigMap,亦或是配置中心等方式来让自己的机密信息避免在源码中出现。文章来源地址https://www.toymoban.com/news/detail-857502.html

  • 在开发过程中保护机密
    😄欢迎关注笔者公众号一起学习交流,获取更多有用的知识~
    安全机密管理:Asp.Net Core中的本地敏感数据保护技巧

到了这里,关于安全机密管理:Asp.Net Core中的本地敏感数据保护技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • .NET 8 Preview 7 中的 ASP.NET Core 更新

    .NET 8 Preview 7 中的 ASP.NET Core 更新

    作者:Daniel Roth 排版:Alan Wang .NET 8 Preview 7 现在已经发布,其中包括了对 ASP.NET Core 的许多重要更新。 以下是预览版本中新增功能的摘要: 服务器和中间件 防伪中间件 API 编写 最小 API 的防伪集成 Native AOT 请求委托生成器支持拦截器功能 Full TrimMode 用于启用修剪功能编译的

    2024年02月11日
    浏览(6)
  • .NET 8 Preview 4 中的 ASP.NET Core 更新

    .NET 8 Preview 4 中的 ASP.NET Core 更新

    作者:Daniel Roth - Principal Program Manager, ASP.NET 翻译:Alan Wang 排版:Alan Wang .NET 8 Preview 4 现已可用,并包括了许多对 ASP.NET Core 的新改进。 以下是本预览版本中的新内容摘要: Blazor 使用 Blazor 组件进行流式渲染 使用 Blazor SSR 处理表单提交 在 Blazor 中路由到命名元素 Webcil 为 Bl

    2024年02月12日
    浏览(14)
  • ASP.NET Core 中的 Razor Pages

    Razor Pages 是基于页面的 ASP.NET Core Web App 架构。 相比 MVC 模式,Razor Pages的生产效率更快。 Razer Pages 需要两个中间件: builder…Services.AddRazorPages 添加 Razor Pages services app.MapRazorPages 添加 Razor Pages endpoints .cshtml 与 .cshtml.cs 在最简单的页面中: 看起来与 MVC 的页面差不多,但特别之

    2024年02月09日
    浏览(26)
  • ASP.NET Core 中的 Dependency injection

    依赖注入 (Dependency Injection,简称DI)是为了实现 各个类之间的依赖 的 控制反转 (Inversion of Control,简称IoC )。 ASP.NET Core 中的Controller 和 Service 或者其他类都支持依赖注入。 依赖注入术语中, Service 是一个为其他对象提供服务的类 **。 Service 不是一个Web Service,与Web Serv

    2024年02月11日
    浏览(10)
  • ASP.NET Core 中的 wwwroot 文件夹

    ASP.NET Core 中的 wwwroot 文件夹

    在本文中,我将讨论 ASP.NET Core 应用程序中的 wwwroot 文件夹。请阅读我们之前讨论过ASP.NET Core 请求处理管道的文章。在本文的最后,您将了解 wwwroot 文件夹及其需求以及如何在 ASP.NET Core 应用程序中进行配置。 ASP.NET Core 中的 wwwroot 文件夹是什么? 默认情况下,ASP.NET Core 应用

    2024年02月04日
    浏览(10)
  • ASP.NET Core 中的两种 Web API

    ASP.NET Core 有两种创建 RESTful Web API 的方式: 基于 Controller,使用完整的基于ControllerBase的基类定义接口endpoints。 基于 Minimal APIs,使用Lambda表达式定义接口 endpoints。 基于 Controller 的 Web API 可以使用构造函数注入,或者属性注入,遵循面向对象模式。 基于 Minimal APIs 的 Web API 通

    2024年02月09日
    浏览(18)
  • 理解ASP.NET Core - 全球化&本地化&多语言(Globalization and Localization)

    注:本文隶属于《理解ASP.NET Core》系列文章,请查看置顶博客或点击此处查看全文目录 在众多知名品牌的网站中,比如微软官网、YouTube等,我们经常可以见到“切换页面语言”的功能,我们可以选择最适合的语言浏览页面内容。毫无疑问,为网站提供多种语言,页面内容本

    2024年02月08日
    浏览(15)
  • Asp-Net-Core开发笔记:API版本管理

    Asp-Net-Core开发笔记:API版本管理

    对于Web API应用程序而言,随着时间的推移以及需求的增加或改变,API必然会遇到升级的需求。事实上,Web API应用程序应该从创建时就考虑到API版本的问题。业务的调整、功能的增加、接口的移除与改名、接口参数变动、实体属性的添加、删除和更改等都会改变API的功能,从

    2024年02月08日
    浏览(11)
  • 【ASP.NET Core 基础知识】--安全性--防范常见攻击

    在现实网络中即存在着安全的流量,又存在着不安全的流量在,这些不安全的流量常常会对我们的网站服务造成威胁,严重的甚至会泄露用户的隐私信息。这篇文章我们通过对常见的网络攻击 跨站脚本攻击 、 跨站请求伪造(CSRF) 、 SQL注入 、 敏感数据泄露 、 身份验证与授权

    2024年02月20日
    浏览(46)
  • ASP.NET Core MVC 从入门到精通之日志管理

    ASP.NET Core MVC 从入门到精通之日志管理

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步

    2024年02月09日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包