我应该如何处理在源代码控制项目中的秘密值
本文关键字:项目 控制项 控制 秘密 源代码 何处理 处理 我应该 | 更新日期: 2023-09-27 18:09:27
我的问题本质上与这个问题相同,但对于Windows Store应用程序,c#和Visual Studio。我想有一个简单的方法来保持秘密值在项目中,在一个文件,可以忽略(不签入)源代码控制。我应该如何构建我的项目,以存储应用程序的秘密方式,使构建/源代码控制容易?
我的第一个想法是将它存储在XML文件中(没有签入),并在运行时加载它,但这使得安装它的用户可以使用它,因此应该在构建时完成。我怎么能存储一对夫妇的秘密值,并有visual studio取代他们在我的代码,当我的项目是建立?
在我的公司,我们决定给你以下的解决方案。在配置文件中,我们在外部配置中链接带有"秘密"值的部分。外部配置在源代码控制中。首先它不是,但当我们的构建服务器丢失了一个磁盘时,我们决定将其存储在有备份的地方更安全。源代码控制中的文件夹(也可以在文件服务器上)实际上仅限于对需要它的人进行读写。构建过程签出"project"文件夹和"configuration"文件夹,然后进行构建。构建后"配置"文件夹被删除。对构建服务器的访问也受到限制。
一种选择是将秘密存储在源代码管理中,但以加密形式存储。在开发或构建环境中,使用环境变量来存储密钥,并动态解密。这样,您可以在保证信息安全的同时获得源代码控制的好处。
即使你正在使用app.config或web,也可以这样做。配置,您只需要在启动时从代码修改配置。
埃里克
已更新
如果你把一个秘密放在一个不受信任的区域(例如公共源控制),它是脆弱的。即使它被加密了,只要足够努力,它也可以被检索到。
真正让它遥不可及的唯一方法是拥有一个与第三方API交互的外部服务。这有其自身的权衡(例如,您在评论中提到的用户身份验证)。特别是当你的开发者在测试时需要使用第三方API时,我认为没有其他选择可以限制秘密的曝光。
在您的项目中创建一个新的类文件,该文件具有所有秘密值的插槽,并为所有这些值保存虚拟/测试值。将它与项目的其余部分一起检入源代码控制,这样任何没有访问秘密的人都可以获得某种测试版本。
然后,用真正的秘密值创建那个类文件的副本,并把它放在源代码控制之外的某个地方。在预构建事件中编写一个批处理脚本,查找这个类文件,如果找到,用它替换项目中包含的虚拟文件。
这样,您的项目仍然可以在源代码控制中,任何人都可以检查它,构建它,并在测试模式下运行它。你的秘密文件/值只存储在你的构建服务器上,所以只有当你在那里构建项目时,它才会有真正的值。
记得把你的秘密文件备份到某个地方。还要记住,. net代码可以很容易地反编译,因此您的秘密可能不像您希望的那样秘密——任何使用. net反射器的用户都可以看到发布程序集中的所有代码,包括您的秘密类。