保护 .NET Core 项目的敏感信息

我们的项目中几乎都会有配置文件,里面可能会存储一些敏感信息,比如数据库连接字符串、第三方API的AppKey和SecretKey等。

对于开源项目,这些敏感信息肯定不能随着源代码一起提交到托管平台。

对于网站应用大多都是要部署到有公开IP的服务器上的,存有敏感信息的文件放在Web目录下也不安全。

较好的办法是把敏感信息文件存在项目以外的地方。

在.NET Core中,我们可以使用Secret Manager工具来管理敏感信息,这个工具可以将敏感信息保存在一个secrets.json文件中,它不在项目文件夹下,而是存放在另外的地方。对于三种操作系统,它的位置是:

Windows: %APPDATA%/Microsoft/UserSecrets/<UserSecretsId>/secrets.json
Linux  : ~/.microsoft/usersecrets/<UserSecretsId>/secrets.json
Mac    : ~/.microsoft/usersecrets/<UserSecretsId>/secrets.json

一个.NET Core应用对应一个唯一的UserSecretsId,一般是一个GUID。

这也限制了每个开发者都必须有自己的UserSecrets文件夹。虽然有些麻烦,但这也有个好处。就是每个开发者可以使用不同于其它开发者的敏感数据进行开发。比如有些公司的数据库为每个开发者创建了独立的数据库访问账号。

在VS中可以很方便地操作secrets.json。右击项目,选择[Manage User Secrets],如图:

编辑打开的secrets.json文件,把敏感信息填入其中,如:

{
  "ConnectionString": "server=localhost;database=testdb;uid=root;pwd=123456;"
}

保存后,.csproj文件中会自动生成一个UserSecretsId:

如果不用VS,也可以在此处手动添加UserSecretsId,然后在项目目录下通过命令来添加或删除配置项,例如:

dotnet user-secrets set "Foo:ApiKey" "123456"
dotnet user-secrets remove "Foo:ApiKey"

如果secrets.json和appsettings.json有相同的配置项,程序会优先读取前者的值。

对于secrets.json的所有配置项,最好也在appsettings.json保留相应的占位,比如:

{
  "ConnectionString": "<your connection string here>",

  // 其它配置
}

这样appsettings.json中的占位可以告诉其它开发者有这样一个配置。这对于开源项目十分有用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值