在sinatra + heroku应用程序中存储管理员密码的位置?

时间:2011-03-01 17:16:52

标签: security heroku sinatra

我有一个小型的Sinatra应用程序,我在Heroku上运行,它使用一个管理员密码,以及一些API身份验证密钥。

哪里是存放这些东西的最佳地点?我是否将它们放在环境变量中,然后使用

heroku config:add ADMIN_PASSWORD=foobar

?或者我使用包含它们的配置文件,我只是不提交配置文件?

1 个答案:

答案 0 :(得分:12)

我在配置yaml中粘贴了API密钥和类似的东西,就像这样

development:
  twitter_api_key: stringstringstring 
  chunky: bacon
production:
  twitter_api_key: gnirtsgnirtsgnirts
  foo: bar

然后使用Sinatra的内置 set 来处理数据。

configure do   
    yaml = YAML.load_file(settings.config + "/config.yaml")[settings.environment.to_s]
    yaml.each_pair do |key, value|
      set(key.to_sym, value)
    end
end 

然后我可以从设置对象访问它们。不过,我不知道你为什么不提交配置文件。 。 。这里没有重大的安全风险,因为只有那些你明确定义的路径才能通过网络访问。如果您不想将管理员密码放在数据库中,我想管理密码可以以相同的方式存储,但我至少会用salt对其进行加密。

在定义自己的时候,小心不要踩到Sinatra的Configuration settings

编辑:

我想我刚才意识到为什么你不想提交配置文件。如果您正在开发一个开源项目,您当然不希望将配置文件提交到您的开源代码库,但您需要将该文件提交给Heroku才能使其正常工作。如果是这种情况,我要么:

  • 使用两个单独的本地回购:一个用于开源项目,一个用于heroku项目。只需将开源项目设置为Heroku项目中的上游存储库,然后就可以获取更改。
  • 将API密钥和加密/加密密码都放在数据库中; MongoHQ使用MongoDB为Heroku用户提供免费套餐作为简单nosql存储的插件。