我一直在我的 Ruby on Rails 应用程序上使用 gitignore 来保护密码/密钥,这样我的配置文件就不会被提交到 Github 上并且可以公开查看。
浏览 Github Developer's API 教程建议使用环境变量来存储这些。如果我不部署,是否有任何理由不应该使用 gitignore 来存储我的密钥?
我一直在我的 Ruby on Rails 应用程序上使用 gitignore 来保护密码/密钥,这样我的配置文件就不会被提交到 Github 上并且可以公开查看。
浏览 Github Developer's API 教程建议使用环境变量来存储这些。如果我不部署,是否有任何理由不应该使用 gitignore 来存储我的密钥?
没有非常令人信服的理由更喜欢环境变量而不是文件,但我不确定依赖.gitignore
并将文件保存在源代码树中是否会感到舒服。如果您选择文件,您可能需要考虑将它们移到源代码树之外以避免任何错误。
如果您在过去的任何时候提交过文件(尤其是提交到像 GitHub 这样的公共网站),那么.gitignore
稍后添加它们不会删除之前提交的版本的副本;它们仍将在存储库中,并且有人可以浏览回没有被忽略的版本。
此外,根据您运行应用程序的方式,将它们与应用程序放在同一目录中可能会使您更容易受到基于 Web 的安全漏洞的攻击。如果您将它们保留在应用程序树之外,您可能会获得一些有限的保护,以防止可以从应用程序树中读取任意数据的漏洞利用。我不知道这会引起多大的关注(可以在应用程序树内读取的漏洞利用也可能在其外部读取),但将它们保存在另一个目录中并没有什么坏处。
我更喜欢环境变量,因为它使部署到 Heroku 更容易,所以我也在开发中使用它们。除了简单的登录名/密码对(RSA 密钥等)之外,我可能会使用一个文件,并将其存储在我的主目录或/var/lib
or/etc
或/usr/local
or 下的某个地方。
有专门用于解决此类问题的 gem
费加罗:https ://github.com/laserlemon/figaro
简而言之,Figaro 提供了一种简洁的方式来配置您的应用程序并保持私有内容......私有。
您的所有密码、API 密钥和任何机密信息都可以保存在本地 yml 中,并且不会被推送到远程 git repo。