2009-09-26 8 views
10

Ich versuche herauszufinden, wie der beste Weg zur Sicherung meiner Staging-Umgebung aussehen würde. Zur Zeit läuft sowohl die Bereitstellung als auch die Produktion auf demselben Server.Passwort zum Schutz einer Schienen-Staging-Umgebung

Die beiden Optionen, die ich denken kann, wäre:

Verwenden Schienen Digest-Authentifizierung

ich so etwas wie dies in der 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 

Dies wurde zerrissen setzen könnte von Ryan Daigle's blog. Ich laufe auf dem neuesten Rails 2.3, so dass ich von dem Sicherheitsproblem, das sie damit hatten, frei sein sollte.

Verwenden Webserver-Authentifizierung

kann ich auch diese Berechtigungen mit .htaccess oder Apache erreichen, aber es ist mein Server-Provisioning etwas komplexer macht (ich Chef bin mit und würde verschiedene Apache-Konfigurationen für Staging erfordern /Produktion).

Für jetzt habe ich die erste implementiert und funktioniert, sehen Sie ay Probleme damit? Habe ich etwas Offensichtliches verpasst? Danke im Voraus!

Antwort

25

Ich stoße das, um anderen zu helfen, wie ich selbst, während ich dies lese, bevor ich mich auf eine ähnliche, aber sauberere Lösung beginne.

# 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 

Ich schrieb eine kurze blog post darüber.

+0

Es gibt auch diese Option, die kürzlich hinzugefügt wurde: https://github.com/rails/rails/commit/e2b07ee000439d0bd41f725ff9f7ad53e52a7e9b, Ich mag Ihre Lösung aber, ich denke, es ist der Weg zu gehen. – jonnii

1

Ich würde mit der HTTP-Basisauthentifizierung gehen, sehe ich keine inhärenten Probleme damit.

+0

Dies ist, was ich getan habe. Es hat eine Belohnung für die letzten 3 Monate funktioniert. – jonnii

8

Wenn Sie mit Multi-Staging-Umgebungen bereitstellen und so haben Sie Produktionsumgebung und Staging-Umgebung, müssen Sie nur diese Zeilen config/Umgebungen/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 

Dadurch hinzufügen , Sie müssen Apache nicht konfigurieren.

Ich benutze Ruby 2 mit Rails 4 und es funktioniert wie ein Charme!

Verwandte Themen