保护Rails临时环境的密码设置

10

我试图找出如何更好地保护我的暂存环境。当前,我在同一台服务器上运行暂存和生产环境。

我能想到的两个选择是:

使用Rails摘要身份验证

我可以在application_controller.rb中添加类似于以下内容的代码:

# Password protection for staging environment
if RAILS_ENV == 'staging'
  before_filter :authenticate_for_staging
end

def authenticate_for_staging
  success = authenticate_or_request_with_http_digest("Staging") do |username|
    if username == "staging"
      "staging_password"
    end
  end
  unless success
    request_http_digest_authentication("Admin", "Authentication failed")
  end
end

这段内容摘自Ryan Daigle的博客。我正在最新版本的Rails 2.3上运行,所以应该不会受到他们在这方面遇到的安全问题的影响。

使用Web服务器认证

我也可以使用.htaccess或apache权限来实现此目的,但这会使我的服务器配置略微复杂一些(我正在使用Chef,并且需要针对Staging/Production使用不同的apache配置)。


目前,我已经实现并正常运行了第一个方法,你看有什么问题吗?我是否漏掉了一些明显的东西?提前感谢!

3个回答

25

我顶一下这个帖子,帮助其他人,就像我自己一样。在找到一个类似但更干净的解决方案之前,我也读了这篇文章。

# config/environments/staging.rb

MyApp::Application.configure do
  config.middleware.insert_after(::Rack::Lock, "::Rack::Auth::Basic", "Staging") do |u, p|
    [u, p] == ['username', 'password']
  end

 #... other config
end

我写了一篇关于它的简短博客文章


这里还有一个最近添加的选项:https://github.com/rails/rails/commit/e2b07ee000439d0bd41f725ff9f7ad53e52a7e9b,不过我喜欢你的解决方案,我认为那是正确的方式。 - jonnii

8
如果您正在使用多个阶段环境进行部署,因此您有生产环境和分段环境,则只需将这些行添加到 config/environments/staging.rb
MyApp::Application.configure do
  # RESTRICTING ACCESS TO THE STAGE ENVIRONMENT
  config.middleware.insert_before(::Rack::Runtime, "::Rack::Auth::Basic", "Staging") do |u, p|
    u == 'tester' && p == 'secret'
  end

  ...

end

通过这样做,您无需配置Apache。
我正在使用Ruby 2和Rails 4,它非常好用!

1

我会选择使用HTTP基本身份验证,我认为它本身没有任何问题。


这就是我最终所做的。在过去的三个月中它效果很好。 - jonnii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接