保护 .NET Core 项目的敏感信息
我們的項(xiàng)目中幾乎都會(huì)有配置文件,里面可能會(huì)存儲(chǔ)一些敏感信息,比如數(shù)據(jù)庫(kù)連接字符串、第三方API的AppKey和SecretKey等。
對(duì)于開(kāi)源項(xiàng)目,這些敏感信息肯定不能隨著源代碼一起提交到托管平臺(tái)。
對(duì)于網(wǎng)站應(yīng)用大多都是要部署到有公開(kāi)IP的服務(wù)器上的,存有敏感信息的文件放在Web目錄下也不安全。
較好的辦法是把敏感信息文件存在項(xiàng)目以外的地方。
在.NET Core中,我們可以使用Secret Manager工具來(lái)管理敏感信息,這個(gè)工具可以將敏感信息保存在一個(gè)secrets.json文件中,它不在項(xiàng)目文件夾下,而是存放在另外的地方。對(duì)于三種操作系統(tǒng),它的位置是:
Windows: %APPDATA%/Microsoft/UserSecrets/<UserSecretsId>/secrets.json Linux ?: ~/.microsoft/usersecrets/<UserSecretsId>/secrets.json Mac ? ?: ~/.microsoft/usersecrets/<UserSecretsId>/secrets.json一個(gè).NET Core應(yīng)用對(duì)應(yīng)一個(gè)唯一的UserSecretsId,一般是一個(gè)GUID。
這也限制了每個(gè)開(kāi)發(fā)者都必須有自己的UserSecrets文件夾。雖然有些麻煩,但這也有個(gè)好處。就是每個(gè)開(kāi)發(fā)者可以使用不同于其它開(kāi)發(fā)者的敏感數(shù)據(jù)進(jìn)行開(kāi)發(fā)。比如有些公司的數(shù)據(jù)庫(kù)為每個(gè)開(kāi)發(fā)者創(chuàng)建了獨(dú)立的數(shù)據(jù)庫(kù)訪問(wèn)賬號(hào)。
在VS中可以很方便地操作secrets.json。右擊項(xiàng)目,選擇[Manage User Secrets],如圖:
編輯打開(kāi)的secrets.json文件,把敏感信息填入其中,如:
{"ConnectionString": "server=localhost;database=testdb;uid=root;pwd=123456;" }保存后,.csproj文件中會(huì)自動(dòng)生成一個(gè)UserSecretsId:
如果不用VS,也可以在此處手動(dòng)添加UserSecretsId,然后在項(xiàng)目目錄下通過(guò)命令來(lái)添加或刪除配置項(xiàng),例如:
dotnet user-secrets set "Foo:ApiKey" "123456" dotnet user-secrets remove "Foo:ApiKey"如果secrets.json和appsettings.json有相同的配置項(xiàng),程序會(huì)優(yōu)先讀取前者的值。
對(duì)于secrets.json的所有配置項(xiàng),最好也在appsettings.json保留相應(yīng)的占位,比如:
{"ConnectionString": "<your connection string here>",// 其它配置 }這樣appsettings.json中的占位可以告訴其它開(kāi)發(fā)者有這樣一個(gè)配置。這對(duì)于開(kāi)源項(xiàng)目十分有用。
總結(jié)
以上是生活随笔為你收集整理的保护 .NET Core 项目的敏感信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .NET 5 自身就是一个 .NET S
- 下一篇: Azure App Service 健康