2009-09-26 15 views
10

Sto cercando di capire quale sarebbe il modo migliore per proteggere il mio ambiente di staging. Attualmente sto eseguendo sia la gestione temporanea che la produzione sullo stesso server.Password che protegge un ambiente di gestione temporanea delle rotaie

Le due opzioni che posso pensare sarebbe quello di:

Utilizzare rotaie autenticazione Digest

ho potuto mettere qualcosa di simile nel 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 

questo è stato strappato da Ryan Daigle's blog. Sono in esecuzione sull'ultimo Rails 2.3, quindi dovrei essere libero dal problema di sicurezza che hanno avuto con questo.

Usa autenticazione del server web

Potrei anche farlo con .htaccess o Apache i permessi, ma rende il mio server provisioning leggermente più complesso (sto usando Chef, e richiederebbe diverse configurazioni di Apache per la stadiazione /produzione).


Per ora ho implementato e funzionante il primo, ci sono problemi con esso? Ho perso qualcosa di ovvio? Grazie in anticipo!

risposta

25

urtare questo per aiutare gli altri, come me stesso mentre leggo questo prima di sistemarsi su una soluzione simile, ma più pulita.

# 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 

Ho scritto un breve blog post su di esso.

+0

C'è anche questa opzione, che è stata aggiunta di recente: https://github.com/rails/rails/commit/e2b07ee000439d0bd41f725ff9f7ad53e52a7e9b, mi piace la tua soluzione, penso che sia la strada da percorrere. – jonnii

1

Vorrei andare con l'autenticazione di base http, non vedo problemi inerenti con esso.

+0

Questo è quello che ho finito per fare. Ha funzionato a meraviglia negli ultimi 3 mesi. – jonnii

8

Se si sta distribuendo con ambienti multi-sosta e in modo da avere ambiente di produzione e ambiente di staging, avete solo bisogno di aggiungere queste righe a config/ambienti/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 

In questo modo , non è necessario configurare Apache.

Sto usando Ruby 2 con Rails 4 e funziona come un incantesimo!

Problemi correlati