保护 .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 中的占位可以告诉其它开发者有这样一个配置。
这对于开源项目十分有用。
保护 .NET Core 项目的敏感信息的更多相关文章
- Django项目SECRET_KEY等敏感信息保存
在我们做完django项目后,向生产环境部署时,为了避免一些敏感信息被有心人利用,我们应该将其保护起来,比如说在settings配置中的一些密码等内容存在操作系统内,通过调用来使用,比如下面这种做法: ...
- Spring Boot 配置中的敏感信息如何保护?
在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种细节用法,比如:参数间的引用.随机数的应用.命令行参数的使用.多环境的配置管理等等. 这些配置相关的知识都是Sprin ...
- 使用jni技术进行android应用签名信息核查及敏感信息保护
近期业余时间写了一款应用<摇啊摇>,安智.安卓.360等几个应用商店已经陆续审核通过并上线.从有想法到终于将产品做出来并公布,断断续续花了近二个半月的业余时间,整体来讲还算顺 ...
- 【Git】敏感信息保护
保护Git仓库敏感信息 代码中无可避免有一些敏感信息,包含但不限于,数据库信息,密钥,账号信息等等.通常我们会把这些信息放在配置文件,这些信息若泄露会造成安全问题. 以前我们做法,是把配置文件通过.g ...
- 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本 ...
- 利用数据库视图实现WEB查询敏感信息接口动态脱敏
前言: 利用数据库视图,实现web接口查询敏感信息时动态脱敏. 具体目标:某接口为用户信息查询接口,返回敏感用户信息(id,姓名.手机号[敏感].身份证号[敏感]),如果web用户为管理员角色,则查询 ...
- DotNet隐藏敏感信息操作方法
在项目中,有时候一些信息不便完全显示,只需要显示部分信息.现在提供一些隐藏敏感信息的操作方法,主要为对信息的截取操作: 1.指定左右字符数量,中间的*的个数和实际长度有关: /// <summa ...
- Spring拓展接口之BeanFactoryPostProcessor,占位符与敏感信息解密原理
前言 开心一刻 一只被二哈带偏了的柴犬,我只想弄死隔壁的二哈 what:是什么 BeanFactoryPostProcessor接口很简单,只包含一个方法 /** * 通过BeanFactoryPos ...
- 【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了如何使用Dapper持久化IdentityServer4(以下简称ids4)的信息,并实现了sqlserver和mysql两种 ...
随机推荐
- [十]基础数据类型之Unicode编码简介
编码含义 关于编码的含义,之前也说过,计算机只能存储二进制序列 所以对于字符,保存的时候,需要进行编码为二进制,进行存储 呈现的时候,需要将二进制进行解码,转换成字符的形式 有很多种编码方式,比如 ...
- Spring Boot 2.x(九):遇到跨域不再慌
什么是跨域 首先,我们需要了解一下一个URL是怎么组成的: // 协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址 http: + // + www.baidu.com + :8080/ ...
- 关于mysql-connector-net和C#.net
mysql-connector-net-8.0.11.msi 可以从这里下载:mysql-connector-net-8.0.11 如果使用ado.net链接mysql数据库则只需要引用 MyS ...
- Java 内存模型 JMM 浅析
JMM简介 Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性.是否可以重排序等问题的无关具体平台的统一的保证.(可能在术语上与Java ...
- C# 消息队列-MSMQ
MQ是一种消息中间件技术,所以它能够支持多种类型的语言开发,同时也是跨平台的通信机制,也就是说MQ支持将信息转化为XML或者JSon等类型的数据存储到消息队列中,然后可以使用不同的语言来处理消息队列中 ...
- Android Studio 关于沉浸式状态栏
values-v19/style.xml <style name="AppTheme" parent="Theme.AppCompat.Light.NoAction ...
- 快速傅里叶变换(FFT)详解
本文只讨论FFT在信息学奥赛中的应用 文中内容均为个人理解,如有错误请指出,不胜感激 前言 先解释几个比较容易混淆的缩写吧 DFT:离散傅里叶变换—>$O(n^2)$计算多项式乘法 FFT:快速 ...
- #WEB安全基础 : HTML/CSS | 文章索引
本系列讲解WEB安全所需要的HTML和CSS #WEB安全基础 : HTML/CSS | 0x0 我的第一个网页 #WEB安全基础 : HTML/CSS | 0x1初识CSS #WEB安全基础 : H ...
- 【Dojo 1.x】笔记7 配置对象dojoConfig的内容1:has属性、加载器的属性
说完了出身,即出身自dojo/_base/目录下的config模块,那就要好好讲讲这对象有什么可以写的属性了. 1. has属性 官方说是用于更好的特征检测的,具体有什么用现在还不得知. 例如: &l ...
- 通过ADB查看当前Activity
cmd命令中输入:adb shell dumpsys activity activities 在一连串的输出中找到Runing activities com.android.settings是包名. ...