2009-09-26 7 views
10

J'essaie de déterminer quelle serait la meilleure façon de sécuriser mon environnement de transfert. Actuellement, je cours à la fois la mise en scène et la production sur le même serveur.Mot de passe protégeant un environnement de stockage intermédiaire de rails

Les deux options que je peux penser serait de:

Utiliser l'authentification digest rails

je pourrais mettre quelque chose comme ça dans le 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 

Cela a été arraché à partir de Ryan Daigle's blog. Je cours sur les derniers Rails 2.3 donc je devrais être libre du problème de sécurité qu'ils ont eu avec ceci.

Utiliser l'authentification du serveur web

Je pourrais aussi y parvenir en utilisant des autorisations .htaccess ou apache, mais il est un peu plus complexe mon approvisionnement du serveur (j'utilise le chef, et nécessiterait différentes configs apache pour la mise en scène /production).


Pour l'instant, j'ai le premier mis en œuvre et de travail, voyez-vous des problèmes? Ai-je manqué quelque chose d'évident? Merci d'avance!

Répondre

25

cogner pour aider les autres, comme moi-même pendant que je lis ceci avant de choisir une solution similaire mais plus propre. J'ai écrit un court blog post à ce sujet.

+0

Il y a aussi cette option, qui a été ajoutée récemment: https://github.com/rails/rails/commit/e2b07ee000439d0bd41f725ff9f7ad53e52a7e9b, j'aime bien votre solution, je pense que c'est la voie à suivre. – jonnii

1

Je voudrais aller avec l'authentification de base http, je ne vois pas de problèmes inhérents avec elle.

+0

C'est ce que j'ai fini par faire. Il a travaillé un traitement pour les 3 derniers mois. – jonnii

8

Si vous déployez des environnements multi-mise en scène et ainsi que votre environnement de production et de l'environnement de la mise en scène, il vous suffit d'ajouter ces lignes à config/environnements/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 

Ce faisant , vous n'avez pas besoin de configurer Apache. J'utilise Ruby 2 avec Rails 4 et ça fonctionne comme un charme!