Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net core如何在非Azure主机中保护连接字符串敏感数据_C#_Asp.net Core - Fatal编程技术网

C# ASP.Net core如何在非Azure主机中保护连接字符串敏感数据

C# ASP.Net core如何在非Azure主机中保护连接字符串敏感数据,c#,asp.net-core,C#,Asp.net Core,我是ASP.Net核心的新手,我尝试开发ASP.Net核心MVCWebAPI。我需要连接到我的数据库。我不知道我应该把我的连接字符串放在哪里。我把它放在appsettings.json文件中。但当我将API部署到非Azure主机时,它将公开我的数据库密码。我试过secret manager,但它似乎只是针对开发阶段,不确定我是否理解正确。我尝试输入环境变量,但在IIS hsoting中它不起作用。 我想知道如何在部署到非Azure主机时保护我的敏感数据。我应该把它放在哪里?它是免费的、开源的。你

我是ASP.Net核心的新手,我尝试开发ASP.Net核心MVCWebAPI。我需要连接到我的数据库。我不知道我应该把我的连接字符串放在哪里。我把它放在appsettings.json文件中。但当我将API部署到非Azure主机时,它将公开我的数据库密码。我试过secret manager,但它似乎只是针对开发阶段,不确定我是否理解正确。我尝试输入环境变量,但在IIS hsoting中它不起作用。 我想知道如何在部署到非Azure主机时保护我的敏感数据。我应该把它放在哪里?

它是免费的、开源的。你可以在那里存储你的连接字符串和其他敏感数据。另外还有一个for.net

你的主要选择是:

  • JSON(未加密)
  • 环境变量(未加密)
  • Azure密钥库(加密)
正如您正确确定的那样,JSON将是纯文本,因此不受欢迎,主要是因为源代码控制。如果您正在开发一个封闭源代码的解决方案,那么这个问题就不那么严重了。一旦部署到服务器上,文件权限可以防止窥探细节。用户机密只是JSON。更好的是,它被排除在您的项目之外(因此它不会致力于您的源代码控制),但它仍然未加密存储,是的,它只是用于开发

Azure Key Vault是唯一允许加密的内置选项,因此是最安全的选项。无论您的应用程序是否实际托管在Azure中,您都可以使用Azure Key Vault。然而,它不是免费的(尽管它也不是很贵)

环境变量是Azure Key Vault之外最常用的变量。虽然未加密,但它们存储在服务器上(项目外部),并且仅对在该服务器上具有足够权限的用户可见。如果恶意参与者能够以查看环境变量的权限访问帐户,则可能会认为您的问题比公开数据库凭据严重得多

如果应用程序看不到环境变量,有两件事需要注意:

  • 确保已将它们作为系统变量而不是用户变量添加。用户变量只有在添加时登录的用户(即您)才能访问,这几乎可以肯定不是web服务器运行的用户。或者,您可以登录添加web服务器用户,将变量添加为用户变量。这在服务帐户下运行时很常见。它增加了一个值得怀疑的额外安全级别,因为只有一个帐户可以看到值,而不是任何管理员级别的帐户(较小的攻击面)

  • 如果使用IIS,则必须编辑应用程序池的高级设置,并从中启用“加载用户配置文件”

  • 我使用“管理Web机密”来保存数据库以及其他开发人员和团队成员提供的任何重要数据机密

    这将帮助您隔离各种平台

    你可以在

    您是否担心ISP会读取您的appsettings.json?我不确定这一点,但我相信IIS不提供appsettings.json文件,因此如果有人尝试浏览它,他们只会得到一个404@Steve有些,只是担心。读了一些文章说把敏感数据存储在配置文件中不是个好主意。所以,想想现实世界如何部署连接字符串。@Stevenlemens ya,它将无法冲浪。但在部署到hsoting时,将其存储在appsettings.json文件中是安全的?它不会通过IIS提供服务,但在有人可以访问您的服务器的情况下,这仍然是一个需要解决的问题。许多Microsoft docs for ASP.NET Core似乎希望将人们推到Azure以获得许多不同的服务,以解决可能出现的问题或安全问题,老实说,这有点令人沮丧。您可以在部署时加密appsettings,并在运行时解密。当我发布我的项目时,我会在服务器上发布一个“appsettings.production.secrets.json”,我会确保此json文件中的详细信息是正确的。如果存储在环境变量中,则它仅适用于特定用户。当API部署到主机时,它将无法工作,因为API无法获取连接字符串。我说得对吗?如果存储在appsettings.json中,并且是纯文本,则会有危险,因为它会暴露敏感数据。另请查看AWS安全参数存储。您不必为外部环境变量绑定到azure