基本思想是不要在代码或已编译的二进制文件中签入机密值。特别是如果该项目是开源的,那么您实际上不应该这样做。您可以采取几种配置策略来做到这一点:
代码中的占位符(硬编码值)
如建议的那样,代码中的占位符在动态编程语言中最理智,最容易做到,因为代码易于更改(无需编译)。我已经看到很多开放源代码项目都在使用MediaWiki之类的工具,例如MediaWiki LocalSettings.php
。
这种策略的缺点是密钥是硬编码的。因此,如果程序以二进制形式分发,则对密钥进行硬编码不会使其特别易于维护。
配置文本文件
您也可以通过实现配置文本文件来执行此操作,即程序/应用程序搜索配置文件并从中读取值。您可以使用占位符签入示例配置,但是在计算机中具有本地的实际配置。
在您的情况下,您可以key.conf
使用实际的密钥创建文本文件,让程序使用该文件,并由版本控制将其忽略。为了帮助您,您可以key.conf.example
使用伪造的密钥检入文本文件并检入。确保您的程序/应用程序发出有用的错误消息,以使用户将实际密钥添加到正确的文件中。
某些编程语言具有可以自动为您提供此功能的API,例如:
如果您的应用程序是数据库应用程序,请考虑将密钥或其他配置变量放入数据库中。它与上面的配置文本文件相同,但是您将所有配置变量(例如键)放在数据库表中。
通过首选项视图或后台应用程序
如果程序是带有视图的窗口或Web应用程序,则还可以通过各种首选项视图让应用程序创建配置文件。这样一来,您无需像上面建议的那样检入示例配置文件。
MediaWiki通过LocalSettings.php
在初始安装过程中自动生成文件来解决此问题。
不可否认,对于仅作为后台进程,服务或守护程序运行的程序,这不是一种选择。但是,这就是为什么您在通常称为Back Office应用程序的 Web应用程序中为这些应用程序创建单独的GUI项目以创建管理和首选项设置的入口点的原因。