99 votes

Que fait force_ssl dans Rails ?

Dans un précédent question J'ai découvert que je devais configurer la terminaison ssl de nginx et ne pas laisser Rails traiter des données cryptées.

Alors pourquoi existe-t-il ce qui suit ?

config.force_ssl = true

Je vois que cela est commenté dans le fichier de configuration de production. Mais si l'on s'attend à ce que nginx s'occupe de tous les aspects ssl afin que mon application rails ne traite pas de données cryptées, alors qu'est-ce que cela signifie ? config.force_ssl = true faire ?

Dois-je le laisser commenté en production si je sais que je vais toujours utiliser nginx ?

81voto

Dan Jameson Points 1410

Ce n'est pas le cas. juste forcer votre navigateur à rediriger HTTP vers HTTPS. Il configure également vos cookies pour qu'ils soient marqués "sécurisés", et il permet à HSTS qui sont toutes de très bonnes protections contre la suppression du SSL.

Même si HTTPS protège votre application à " https://example.com/yourapp "contre les attaques MITM, si quelqu'un s'interpose entre votre client et votre serveur, il peut assez facilement vous faire visiter " http://example.com/yourapp ". Sans aucune des protections ci-dessus, votre navigateur enverra volontiers le cookie de session à la personne qui effectue le MITM.

65voto

steel Points 793

Réglage de config.force_ssl comprend ActionDispatch::SSL . En ActionDispatch::SSL Les documents décrivent la fonctionnalité comme suit (les caractères gras sont ajoutés pour plus de clarté) :

Voir les inclusions aquí et les documents relatifs à ActionDispatch::SSL aquí .

DOCS

Cet intergiciel est ajouté à la pile lorsque config.force_ssl = true et on lui transmet les options définies dans config.ssl_options . Il effectue trois tâches pour renforcer la sécurité des requêtes HTTP :

  1. Redirection TLS : Redirige de façon permanente les demandes de http:// vers https://. avec le même hôte URL, le même chemin, etc. Activé par défaut. Définir config.ssl_options pour modifier l'URL de destination de destination (par exemple redirect: { host: "secure.widgets.com", port: 8080 } ), ou définir redirect: false pour désactiver cette fonction.

  2. Cookies sécurisés : Définit le secure drapeau sur les cookies pour dire aux navigateurs qu'ils ne doivent pas être envoyés avec les requêtes http://. Activé par défaut. Définir config.ssl_options con secure_cookies: false pour désactiver cette fonction.

  3. HTTP Strict Transport Security (HSTS) : Indique au navigateur de se souvenir ce site comme étant exclusivement TLS et de rediriger automatiquement les requêtes non TLS. . Activé par défaut. Configurer config.ssl_options con hsts: false à désactiver. Définir config.ssl_options con hsts: { … } pour configurer le HSTS :

    • expires : Durée, en secondes, pendant laquelle ces paramètres seront conservés. La valeur par défaut est 180.days (recommandé). Le minimum requis pour figurer dans les des listes de préchargement est 18.weeks .
    • subdomains : Régler sur true pour indiquer au navigateur d'appliquer ces paramètres à tous les sous-domaines. Cela protège vos cookies de l'interception par un site vulnérable sur un sous-domaine. Valeur par défaut true .
    • preload : Annoncez que ce site peut être inclus dans les navigateurs dans les listes HSTS préchargées des navigateurs. HSTS protège votre site à chaque visite sauf le première visite puisqu'il n'a pas encore vu votre en-tête HSTS. Pour combler cette cette lacune, les fournisseurs de navigateurs intègrent une liste de sites compatibles avec le HSTS. Allez sur https://hstspreload.appspot.com pour soumettre votre site pour inclusion. Pour désactiver le HSTS, il ne suffit pas d'omettre l'en-tête. Les navigateurs se souviendront de la directive HSTS originale jusqu'à son expiration. Utilisez plutôt l'en-tête pour indiquer aux navigateurs d'expirer HSTS immédiatement. Configuration de hsts: false est un raccourci pour hsts: { expires: 0 } .

Les demandes peuvent être retirées de la redirection avec exclude :

config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }

12voto

Stefan Points 23363

Ce paramètre force le HTTPS en redirigeant les requêtes HTTP vers leurs homologues HTTPS. Ainsi, un navigateur visitant http://domain.com/path sera redirigé vers https://domain.com/path .

Le fait de laisser le paramètre commenté permettrait les deux protocoles.

Vous devez encore configurer votre serveur web pour qu'il traite les demandes HTTPS.

5voto

Richard Jordan Points 4067

Il oblige toutes les communications avec le serveur à être cryptées et à utiliser le protocole SSL, c'est-à-dire le protocole HTTPS.

Lorsque vous l'incluez dans un contrôleur, ce dernier n'accepte que les requêtes HTTPS.

Liens utiles :

  1. http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html
  2. http://rubydoc.info/docs/rails/ActionController/ForceSSL
  3. http://railscasts.com/episodes/270-authentication-in-rails-3-1?view=comments

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X