use*_*355 9 git ruby-on-rails heroku ruby-on-rails-4
我对rails非常陌生,但我有一些使用PHP和其他语言编程的经验.我非常喜欢rails,而且我正在为我的公司开发一个应用程序,但我仍然不完全理解secrets.yml文件如何与git和heroku一起工作.我知道秘密用于身份验证,但我还不清楚如何在仍然通过git部署到heroku时保密.
第一个问题是,我真的需要保密我的开发和测试机密吗?Rails自动将生产开发秘密设置为环境秘密(我仍然不完全理解),但是如果人们知道我的开发和测试秘密是什么,为什么会这么重要?
其次,什么是更好地理解使用secrets.yml文件与git一起使用的好资源?rails指南似乎没有很好地使用它(只有一个段落专门用于secrets.yml),这似乎是一个非常重要的主题,可能会导致应用程序中的严重安全漏洞.
最后,其他人如何保护自己的秘密?看看github上的几个示例应用程序,我注意到大多数人似乎没有采取任何措施将秘密文件保存在.gitignore中.这只是一种疏忽,还是因为它不像我认为的那样严重的安全问题?
我感谢任何帮助.我一直在研究这个特定的问题,并没有真正得到任何全面的解决方案.我想向我的公司展示我的项目,并解释使用git这样的版本控制系统的优势,但我也希望该应用程序足够安全,相信它能保证我公司的数据安全.
据我所知,Rails尚未解决这一问题(从Rails 4.2开始)。
从Rails 4.1开始,有一个secrets.yml
文件可用于所有机密信息,但.gitignore
默认情况下未处于该文件中。人们告诉您将其放入,.gitignore
但这并不能帮助Heroku用户将其投入生产。有一个宝石可以帮助解决这个问题。如果您这样做,那么您也可以使用更精巧的方式来使用Figaro宝石。
从secrets.yml
文件的默认内容看来,Rails开发人员打算将其包含在源代码存储库中,但是对于任何真实机密,您都应该使用环境变量并将其导入机密文件中,这几乎违背了目的。 。
如果要使用环境变量来保存秘密,则意味着底层操作系统正在为您存储这些秘密,并且当您需要使用它们时,您会询问操作系统该变量是什么,这样它就根本不在您的代码中。在Heroku上设置环境变量的命令如下所示:
heroku config:set YOUR_SECRET_VAR_NAME=your_secret
Run Code Online (Sandbox Code Playgroud)
这样做有弊端。如果您有很多秘密,事情会很快变得一团糟,并且很难在新计算机上进行设置。
在dotenv宝石来解决这些问题,让你的环境变量没有他们的所有缺点。我建议你结合使用dotenv有secrets.yml
没有把sectrets.yml
在.gitignore
在Heroku和手动设置环境变量。
Rails 5.2终于通过在Rails应用程序中加密所有机密信息解决了这一问题,您只需要在环境变量中存储一个密钥即可。
这是一个(希望很简单)一步一步的指南FOR HEROKU,应该在将文件(secrets.yml)推送到GitHub或其他主机之前执行.
*我不是这方面的专家,但这对我来说效果很好,似乎是一个很好的解决方案.它结合了这个问题的答案中的信息以及这个问题的答案(使用Rails secrets.yml的逐步解释,而不是在部署到Heroku时暴露公共仓库的密钥)以提供简单的指南:)
1)将secrets.yml复制到另一个名为secrets_backup.yml的文件中
你现在应该有两个文件与secrets.yml具有相同的内容
2)添加secrets_backup.yml
到.gitignore
3)将文本更改secrets.yml
为以下内容
development:
secret_key_base: <%= ENV["SECRET_KEY_BASE_DEV"] %>
test:
secret_key_base: <%= ENV["SECRET_KEY_BASE_TEST"] %>
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)
4)cd
在命令行上的rails项目文件夹
5)在终端类型heroku config:set SECRET_KEY_BASE_TEST=<pasted key>
,其中<pasted key>
应该复制并从粘贴test: secret_key_base:<key>
这是在secrets_backup.yml
6)在终端类型heroku config:set SECRET_KEY_BASE_DEV=<pasted key>
,其中<pasted key>
应该复制并从粘贴development: secret_key_base:<key>
这是在secrets_backup.yml
7)我的secrets.yml
文件已经有了SECRET_KEY_BASE而不是实际的密钥,所以我怀疑你的文件也是如此.但如果没有,请将SECRET_KEY_BASE变量设置为上面设置的其他两个变量.
8)将你的回购推送到GitHub和Heroku
9)微笑因为你是GOAT并炫耀你的甜蜜网站!
都是非常好的问题。尽管不保护开发和测试机密可能不会造成严重危害,但这样做是一个很好的做法。泄露可能使不良行为者更容易访问您的应用程序代码或数据的信息没有任何好处。
从 Rails 4.1 开始,config/secrets.yml
可用于管理所有应用程序机密。Rails 4.1发行说明中对此进行了描述。如果您在此文件中管理机密,则绝对应该包含该文件,.gitignore
以便您的机密不会显示在代码存储库中,即使它当前是私有的。您永远不知道将来是否想要开源代码或与其他协作者共享您的私有存储库。您可能知道,一旦您将文件放入 git 中,删除它的所有痕迹可能是一个复杂的过程。或者,您可以在 git 中维护一个 Secrets.yml 模板,以便您可以对机密文件的格式进行源代码控制,但将实际的机密保存在单独的文件中。
如何在生产中管理机密取决于您的部署平台。如果您部署到自己的服务器,您只需要确保您有一种机制来单独维护 的部署secrets.yml
,因为它在您的 git 存储库中不可用。您应该能够使用Capistrano
或 之类的工具通过部署过程来管理它Mina
。如果部署到 Heroku,则需要通过 Heroku CLI 或 Heroku 仪表板设置配置变量,如文档中所述。
希望这可以帮助。
归档时间: |
|
查看次数: |
6331 次 |
最近记录: |