<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      引言

        互聯(lián)網(wǎng)每隔一段時(shí)間就會(huì)爆出 【某程序猿在代碼托管平臺(tái)上傳了公司機(jī)密配置信息,導(dǎo)致公司核心數(shù)據(jù)被黑客獲取或修改】, 一茬又一茬背鍋俠層出不窮。拯救自我
      <https://help.github.com/en/articles/removing-sensitive-data-from-a-repository>

        軟件工程理論早以加粗字體給出 經(jīng)典原則:Never?store production passwords or other sensitive data
      in source code
      依據(jù)這個(gè)原則,我們來(lái)說(shuō)一些.Net 開發(fā)生涯幾種敏感信息分離的方案。 ?
      頭腦風(fēng)暴
      常規(guī)思路是【外部文件方式托管敏感信息】,外部是相對(duì)于 代碼托管倉(cāng)庫(kù)。
      .Net Framework
        可嘗試在appSettings配置節(jié)啟用file屬性,file屬性可引用外部配置文件,具備為原appSetttings新增或重寫同名設(shè)置的能力。
      <configuration>
      <appSettings file="appsecrets.config">
        <add key="FtpUserId" value="test_userid" /><add key="FtpPwd" value="test-pwd
      ">
      </appSettings>
      </configuration>
      ====appsecrets.config====================
      <?xml version="1.0" encoding="utf-8" ?> <appSettings> <add key="FtpUrl"
      value="sftp.rategain.com" /> <add key="FtpUserId" value="RateGain_M&C" /> <add
      key="FtpPwd" value="RateGain@123" /> <add key="RemotePath" value="/M&C/" />
            <!--路徑 /M&C/ 需要轉(zhuǎn)義--> </appSettings>
      https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/appsettings/appsettings-element-for-configuration

      <https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/appsettings/appsettings-element-for-configuration>
      ? .NetCore 可在程序啟動(dòng)時(shí)加載 appsetting.secrets.json文件,該文件也排除在代碼管理倉(cāng)庫(kù)之外,
      部署時(shí)手動(dòng)將該文件拷貝到發(fā)布目錄。 var hostBuilder = WebHost.CreateDefaultBuilder(args)
      .ConfigureAppConfiguration((context, builder)=> { builder.AddJsonFile($"
      appsettings.secrets.json", optional: true); if
      (context.HostingEnvironment.IsDevelopment()) { builder.AddUserSecrets<Startup>(
      true); } builder.AddEnvironmentVariables(); }) .UseStartup<Startup>();
      據(jù)此思路,可將敏感信息叫由其他組件托管,.NetCore開發(fā)者還有其他3種實(shí)踐:

      -? 適用于Dev的 Secrets manager tool 托管

      Asp.NETCore 在開發(fā)環(huán)境下保存密鑰的方式,總體思路是 使用一個(gè)匿名GUID引用存儲(chǔ)在系統(tǒng)文件夾下同名配置Json.


      https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.2&tabs=windows

      -? 適用于Azure云的? Azure Key Vault 托管


      https://azure.microsoft.com/en-us/resources/samples/key-vault-dotnet-core-quickstart/

      -? 適用于General Deploy的環(huán)境變量托管

      下面對(duì)環(huán)境變量方式分離敏感信息做進(jìn)一步說(shuō)明。

      環(huán)境變量托管

      環(huán)境變量能在進(jìn)程創(chuàng)建時(shí)被導(dǎo)入/注入,因此可作為一種敏感信息分離的思路, 環(huán)境變量來(lái)自 3個(gè)級(jí)別 : 系統(tǒng), 用戶,進(jìn)程。

      介紹幾種修改環(huán)境變量的方式:

      ①Window機(jī)器CMD命令行: setx命令, Powershell也可操作

      ②系統(tǒng)控制面板-我的電腦-屬性-高級(jí)設(shè)置-環(huán)境變量

      ? ? ?以上兩種形式可理解 為 AspNetCore進(jìn)程啟動(dòng)時(shí)導(dǎo)入 系統(tǒng)環(huán)境變量。

      ③在Visual Studio launchsettings.json設(shè)定進(jìn)程啟動(dòng)時(shí)要注入的環(huán)境變量
      { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication":
      true, "iisExpress": { "applicationUrl": "http://localhost:11761/", "sslPort": 0
      } },"profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser":
      true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "
      JumpServer": { "commandName": "Project", "launchBrowser": true, "applicationUrl"
      :"http://localhost:5020", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "
      production" , "ASPNETCORE_URLS": "http://localhost:5020" } } } }
      launchSettings.json
      ④在VScode launchsettings.json設(shè)定進(jìn)程啟動(dòng)時(shí)要注入的環(huán)境變量
      { "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "
      type": "coreclr", "request": "launch", "preLaunchTask": "build", "program": "
      ${workspaceRoot}/bin/Debug/netcoreapp1.0/TestApp.dll", "args": [], "cwd": "
      ${workspaceRoot}", "stopAtEntry": false, "launchBrowser": { "enabled": true, "
      args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C
      start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command":
      "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "
      sourceFileMap": { "/Views": "${workspaceRoot}/Views" } } ] } launchsettings.json
      ⑤ 在進(jìn)程啟動(dòng)時(shí)通過(guò)命令行參數(shù)注入
      public static IWebHost BuildWebHost(string[] args) { var webHostBuilder =
      WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext,
      configBuilder)=> { // 默認(rèn)會(huì)加載工作目錄下 appsettings.*.json配置文件     
      configBuilder.AddCommandLine(args).AddEnvironmentVariables(); if
      (hostingContext.HostingEnvironment.IsDevelopment()) configBuilder.AddUserSecrets
      <Startup>(true); }) .ConfigureLogging((hostingContext, logging) => {
      logging.AddAzureWebAppDiagnostics(); }) .UseStartup<Startup>(); return
      webHostBuilder.Build(); }
      --------------
      dotnet run --environment "development"

      ?

      ?⑥ 若使用IIS托管AspNetCore,可在部署機(jī)器IIS的配置編輯器 新增/重寫環(huán)境變量
      ?
      ?在.NetCore生產(chǎn)部署實(shí)踐中,比較常用的方式是使用獨(dú)立的appsettings.secrets.json,環(huán)境變量來(lái)分離敏感信息。

      掌握這些,.Net程序猿應(yīng)該就不會(huì)因?yàn)樵趃it上傳機(jī)密信息而背鍋了。

      ~~~~~~~~~更多方式,歡迎大家留言補(bǔ)充。~~~~

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問(wèn)題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          在线观看中文字幕一区 | 人妻中文在线 | 天天撸夜夜撸 | 女人张开腿让男桶喷水高潮 | 美女操B| 开心激情五月网 | 欧美操穴| 中国航空少妇一级毛片 | 国精产品一区二区三区mba | 操少妇逼视频 |