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

gra*_*tur 7 security heroku sinatra

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

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

heroku config:add ADMIN_PASSWORD=foobar
Run Code Online (Sandbox Code Playgroud)

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

Dor*_*ime 12

我坚持使用API​​键和配置yaml中的那种东西,就像这样

development:
  twitter_api_key: stringstringstring 
  chunky: bacon
production:
  twitter_api_key: gnirtsgnirtsgnirts
  foo: bar
Run Code Online (Sandbox Code Playgroud)

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

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 
Run Code Online (Sandbox Code Playgroud)

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

在定义自己的配置设置时,请注意不要踩到Sinatra的配置设置.

编辑:

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

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