Je suis nouveau sur Rails 4 et ne comprends pas l'utilisation de secret_key_base
en dessous de config/secrets.yml
in Rails 4. Pouvez-vous s'il vous plaît expliquer ce concept?
De plus, lorsque je travaille dans un environnement de production, je suis invité à définir le secret_key
avec devise.rb
, config.secret_key
, et secret_key_base
. Cependant, je peux générer un nouveau secret en utilisant le rake secret
commande.
Quelle est la différence entre les environnements de développement et de production?
Comment correspond-il au secret_key
quand je l’ajoute avec secret_key_base
chaque fois que je génère?
Comment sécurise-t-il l'application avec d'autres serveurs?
Le contenu du fichier secret_token.rb
Comprend une longue chaîne aléatoire utilisée pour vérifier l'intégrité des cookies signés (telles que les sessions utilisateur lorsque des utilisateurs sont connectés à votre application Web).
Documentation dit:
Utilisez votre secret_key_base existante à partir de l’initialiseur
secret_token.rb
Pour définir la variable d’environnement SECRET_KEY_BASE pour les utilisateurs exécutant l’application Rails en mode de production. Vous pouvez également copier la clé secrète existante à partir dusecret_token.rb
Initialiser à secrets.yml dans la section production, en remplacement de<%= ENV["SECRET_KEY_BASE"] %>
.
Puisqu'il s'agit d'un fichier important et que vous ne pouvez pas le placer dans .gitignore, il est considéré comme une bonne pratique d'utiliser la variable env pour stocker la valeur secret_key_base
:
créer un fichier .env
ou .powenv
et le stocker comme suit:
export SECRET_TOKEN="9489b3eee4eccf317ed77407553e8adc97baca7c74dc7ee33cd93e4c8b69477eea66eaedeb18af0be2679887c7c69c0a28c0fded0a71ea472a8c4laalal19cb"
Et puis dans config/initializers/secret_token.rb
YourAppName::Application.config.secret_key_base = if Rails.env.development? or Rails.env.test? # generate simple key for test and development environments
('a' * 30) # should be at least 30 chars long
else
ENV['SECRET_TOKEN']
end
Cet article est (un peu vieux et) long mais vraiment plein d'informations utiles sur le sujet.
À partir de Rails 4.2, le fichier secret_token.rb
N'existe plus. Selon la nouvelle convention, il existe un fichier config/secrets.yml
Destiné à stocker les secrets de l'application.
Ayez une lecture sur la façon de mettre à jour une application existante à 4.2.x selon les innovations.
Techniquement, le but de secrect_key_base
Est d’être l’entrée secrète de la méthode key_generator
De l’application (cochez Rails.application.key_generator
).
Les key_generator
De l’application, et donc secret_key_base
, Sont utilisés par trois fonctionnalités principales dans le cadre Rails:
cookies.encrypted
.cookies.signed
.message_verifier
.Découvrez plus sur chacun des trois dans le article de @michaeljcoyne .
Dans Rails 4,
Hello
, etsession['a'] = 'b'
,votre cookie ressemblera à quelque chose comme ceci:
_Hello_session=BAh7B0kiD3%3D%3D--dc40a55cd52fe32bb3b84ae0608956dfb5824689
qui se traduit par:
_Hello_session=<encrypted a=b>--<digital signature>
Les cookies sont configurés par serveur et conservés côté client, le navigateur les renvoyant envoyant des cookies au serveur chaque fois que nous demandons une page.
Pour empêcher les méchants de comprendre a=b
chaîne, c’est crypté.
Pour empêcher les pervers de falsifier les cookies, signature numérique est utilisé.
Dans les deux cas, secret_key_base la valeur est utilisée (pour chiffrer/déchiffrer a = b et pour valider la signature numérique).