10

ステージング環境を保護するための最善の方法を見つけようとしています。現在、同じサーバーでステージングと本番の両方を実行しています。

私が考えることができる2つのオプションは次のとおりです。

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

これはRyanDaigleのブログからリッピングされました。私は最新のRails2.3で実行しているので、これで発生したセキュリティの問題から解放されるはずです。

Webサーバー認証を使用する

.htaccessまたはapache権限を使用してこれを実現することもできますが、サーバーのプロビジョニングが少し複雑になります(Chefを使用しているため、ステージング/本番環境に異なるapache構成が必要になります)。


今のところ、私は最初のものを実装して動作させていますが、問題がありますか?明らかな何かを見逃したことがありますか?前もって感謝します!

4

3 に答える 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

私はそれについて短いブログ記事を書きました。

于 2011-04-06T10:59:56.203 に答える
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 を構成する必要がなくなります。

私は Rails 4 で Ruby 2 を使用しています。

于 2014-02-06T13:28:52.087 に答える
1

http 基本認証を使用しますが、固有の問題はありません。

于 2009-09-26T22:04:07.490 に答える