在SVN中存储配置文件的策略

时间:2010-08-06 18:52:21

标签: security svn version-control configuration-files

我们的大多数C#项目配置都保存在* .ini文件中。主要是这些文件 许多部分影响程序行为的所有方面。但除常规配置数据外,某些部分易受攻击,如数据库连接字符串或服务器密码。我们尝试将这些部分保留为以下形式:

[Database]
user=testuser
database=testdb
password=

但是当开发人员测试应用程序时,他必须填写配置才能启动应用程序。一些密码被提交到版本控制中是很常见的。 因为这些文件对于应用程序是必不可少的,所以它们不能包含在.svnignore中。 可能我正在寻找的是某种脚本(也许在powershell中)。这将扫描所有* .ini文件并清除所有密码。最有趣的解决方案是添加一些外部密码存储,可以用来编码和解码* .ini文件中的密码。

2 个答案:

答案 0 :(得分:2)

我总是推送在subversion中存储配置模板文件,但不是实际的配置文件。因此,如果配置文件是“config.ini”,那么我将检查填充了非工作样本数据的“config.ini.template”。

然后,为了防止多个开发人员检查他们各自的“config.ini”文件,我将实际的配置文件名添加到svn:ignore属性列表。

这会强制开发人员复制文件并针对其环境进行适当修改,但不要强迫他们找出需要存在的字段,从而简化了该任务的工作。如果你有时间,你甚至可以在模板文件中嵌入注释,以简化某些配置选项的含义。

在文件顶部,包含如何使用模板配置系统的说明,该模板应如下所示:

# *** CONFIGURATION TEMPLATE --- DO NOT MODIFY THIS FILE ***
# 1. Make a copy of this file in the same directory with the command "copy config.ini.template config.ini"
# 2. Edit the new copy and follow the rest of the instructions
# 
# Change "this.system.hostname" to the hostname of this system
Hostname = this.system.hostname
# Set the answer "23" to "42"
Answer = 23

你明白了......

如果您在通过config.ini.template文件检入配置选项时遇到问题(或者认为您可能遇到问题),那么我建议您在模板文件中使用“svn lock”。但是,通过适当的警告,我从未发现它是必要的。

答案 1 :(得分:0)

我不会回答你的问题,而是推荐一种不同的方法,假设改变相关设计还为时不晚。

您不应将密码存储在与其余文件相同的文件中。除常规配置文件外,让应用程序读取专用密码文件(或从密码存储服务检索密码)。这不仅仅是关于不在svn中存储密码,还包括没有密码暴露于肩膀冲浪,意外邮寄或发布时有人要求提供非工作配置的帮助等等。