2017-08-14 77 views
4

直到现在我一直在使用gitignore来忽略我的web.congfig和web.release.config文件,以便我的连接字符串(包括密码)不会被存储在git存储库中。如何在git存储库上保持ASP.net连接字符串密码安全?

对于在加密的可移动媒体上传递的web.config的更改,这已经很好。

但是我刚开始着眼于使用持续集成并将我的代码存储在Visual Studio Team Services上。为了这个工作(除非你可以建议修补程序),我必须将web.config作为项目的一部分。

我正在使用MSSQL DB和连接到不同服务器上的Oracle数据库的Windows服务器(内部)上托管应用程序。

我并不是最先进的开发者,但是至今仍然拥有自己的开发者。所有支持大受欢迎。

+0

可能的重复[如何设置数据库连接字符串从Visual Studio在线连续部署](https://stackoverflow.com/questions/28210564/how-to-set-database-connection-strings-in从视觉上持续部署) – hardkoded

回答

1

您可以通过移动连接字符串的细节外部配置文件实现这一目标的路径。假设你移动你的连接字符串connections.config文件

<connectionStrings> 
    <add name="Name" 
    providerName="System.Data.ProviderName" 
    connectionString="Valid Connection String;" /> 
</connectionStrings> 

现在的web配置可以参照这个文件的连接字符串作为

<?xml version='1.0' encoding='utf-8'?> 
<configuration> 
    <connectionStrings configSource="connections.config"/> 
</configuration> 

More detail about external configuration file

之后,你可以列出你的连接.config文件在gitignore文件

然后推到你的git仓库。

但请确保您的自述文件包含必要的设置以应用于使您的应用程序适用于其他开发人员。正如您已将连接详细信息移至另一个文件,而其他人可能不熟悉该方法并可能导致某些问题。

+0

谢谢,是的,这似乎是最好的方式,但我必须从项目中排除connections.config文件,否则它会在构建时需要它。我还没有从VSTS进行部署,但至少可以成功构建。 – KELF

1

你是对的,以避免登录凭据到源代码管理回购。同时,即使没有CI的考虑,你也一直在构建一个有限的历史,因为git无法帮助你确定web.config应该是什么样子,如果你由于某种原因复制了先前发行版的环境(如跟踪错误的来源)。

一个典型的方法是为每个受影响的配置文件存储一个模板。 (这不仅适用于敏感的值,也适用于环境和/或开发工作站之间的本地应用。)

最简单的情况是,开发人员检查代码,然后复制web.config.template(或类似的东西)改为web.config,然后编辑web.config来插入所需的值。 (您继续告诉git忽略web.config。)

对于CI方案,您希望构建过程自动插入值(如果没有适当的插入值,则会发生错误)。例如,Maven称之为“资源过滤” - 您将为构建服务器上的每个环境存储一个“过滤器”(一个将占位符映射到实际值的文件),开发人员可以维护自己的过滤器以进行本地构建。

(如果你不使用具有这种功能的构建工具,你可以只要保持构建服务器上可用的web.config的副本,但是这容易出错时web.config应该改变。)

+0

使用CI会不会导致将文件发布到服务器的问题,因为它始终用新版本替换旧的Web.config(除非它没有重要信息)? – KELF

0

您可以将连接字符串干脆转移到一个新的配置文件,然后使用配置源

之后引用该文件,您可以将其发布到文件系统 - >转到Visual Studio工具 - >打开开发人员命令提示符在管理模式 - > 给命令 ASPNET_REGIIS -pef“的ConnectionStrings”“您的您已经发布代码” -prov“DataProtectionConfigurationProvider”

您将从此得到加密的配置文件路径。 可以在运行时读取。

在解密时,您可以使用命令: ASPNET_REGIIS -pdf“的ConnectionStrings”“您的您已经发布代码”