En una pregunta anterior , descubrí que debería configurar la terminación nginx ssl y no hacer que Rails procese datos cifrados.
Entonces, ¿por qué existe lo siguiente?
config.force_ssl = true
Veo esto comentado en el archivo de configuración de producción. Pero si la expectativa es que nginx manejará todas las cosas ssl para que mi aplicación rails no maneje datos encriptados, ¿qué hace config.force_ssl = true
?
¿Debo dejarlo comentado en producción si sé que siempre usaré nginx?
fuente
force_ssl
propiedad separada por controlador . Laforce_ssl
variable de configuración, que instala elRack::SSL
middleware, que habilita HSTS de forma predeterminada .config.force_ssl = true
debería ser el predeterminado, ¿por qué el equipo de Rails lo comentó como predeterminado?El entorno
config.force_ssl
incluyeActionDispatch::SSL
. LosActionDispatch::SSL
documentos describen la funcionalidad de la siguiente manera (énfasis agregado para mayor claridad):DOCS
Este middleware se agrega a la pila cuando
config.force_ssl = true
se pasan las opciones establecidas enconfig.ssl_options
. Realiza tres trabajos para hacer cumplir las solicitudes HTTP seguras:Redireccionamiento TLS: Redirige permanentemente las solicitudes http: // a https: // con el mismo host de URL, ruta, etc. Habilitado de forma predeterminada. Configure
config.ssl_options
para modificar la URL de destino (predirect: { host: "secure.widgets.com", port: 8080 }
. Ej. ), O configureredirect: false
para deshabilitar esta función.Cookies seguras: establece la
secure
marca en las cookies para indicar a los navegadores que no deben enviarse junto con solicitudes http: //. Habilitado por defecto. Configureconfig.ssl_options
consecure_cookies: false
para deshabilitar esta función.Seguridad de transporte estricta HTTP (HSTS): le dice al navegador que recuerde este sitio como solo TLS y redirija automáticamente las solicitudes que no sean TLS . Habilitado por defecto. Configure
config.ssl_options
conhsts: false
para deshabilitar. Establecerconfig.ssl_options
conhsts: { … }
para configurar HSTS:expires
: Cuánto tiempo, en segundos, se mantendrán estos ajustes. El valor predeterminado es180.days
(recomendado). El mínimo requerido para calificar para las listas de precarga del navegador es18.weeks
.subdomains
: Configúrelo paratrue
indicarle al navegador que aplique esta configuración a todos los subdominios. Esto protege sus cookies de la interceptación de un sitio vulnerable en un subdominio. Por defecto estrue
.preload
: Anuncie que este sitio puede estar incluido en las listas HSTS precargadas de los navegadores. HSTS protege su sitio en cada visita, excepto en la primera visita, ya que aún no ha visto su encabezado HSTS. Para cerrar esta brecha, los proveedores de navegadores incluyen una lista integrada de sitios habilitados para HSTS. Vaya a https://hstspreload.appspot.com para enviar su sitio para su inclusión. Para desactivar HSTS, omitir el encabezado no es suficiente. Los navegadores recordarán la directiva HSTS original hasta que expire. En su lugar, use el encabezado para indicar a los navegadores que expiren HSTS inmediatamente. La configuraciónhsts: false
es un atajo parahsts: { expires: 0 }
.Las solicitudes pueden excluirse de la redirección con
exclude
:config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }
fuente
exclude
" - Advertencia: esta función sólo se ha añadido recientemente en los carriles 5, por lo que no funcionará para aquellos de nosotros en los carriles o por debajo de 4.2exclude
opciones globales estaban disponibles mucho antes de Rails 5, por lo que su sintaxis es ligeramente diferente:config.ssl_options = { exclude: proc { |env| env['PATH_INFO'].start_with?('/healthcheck/') } }
- serverfault.com/a/517401Esta configuración fuerza HTTPS al redirigir las solicitudes HTTP a sus contrapartes HTTPS. Por tanto, una visita del navegador
http://domain.com/path
será redirigida ahttps://domain.com/path
.Dejar el entorno comentado permitiría ambos protocolos.
Aún tiene que configurar su servidor web para manejar solicitudes HTTPS.
fuente
redirect 301 https:...
), ¿TODO no pasará por https, por loconfig.force_ssl = true
que realmente no hace nada (ya que nada será http)? ¿O hay una razón de seguridad más profunda aquí?config.force_ssl
habilitado, en caso de que alguien esté eliminando la redirección de la configuración del servidor web.config.force_ssl
yadd_header Strict-Transport-Security max-age=...;
resultará en 2Strict-Transport-Security
encabezadosObliga a que toda la comunicación con el servidor esté cifrada y utilice SSL, es decir, a través de HTTPS.
Cuando lo incluye en un controlador, ese controlador solo aceptará solicitudes HTTPS.
Enlaces Útiles:
fuente