Se volete che il vostro intera applicazione per essere servito su HTTPS poi dal Rails 4.0 il modo migliore per farlo è quello di consentire force_ssl
nel file di configurazione in questo modo:
# config/environments/production.rb
Rails.application.configure do
# [..]
# Force all access to the app over SSL, use Strict-Transport-Security,
# and use secure cookies.
config.force_ssl = true
end
Per default l'opzione è già presente nello config/environments/production.rb
nelle app appena generate, ma è commentata.
Come dice il commento, questo non solo reindirizzerà a https, ma imposta anche l'intestazione Strict-Transport-Security
(HSTS) e si assicura che il flag di sicurezza sia impostato su tutti i cookie. Entrambe le misure aumentano la sicurezza della tua applicazione senza inconvenienti significativi. Utilizza ActionDispatch:SSL
.
Le impostazioni di scadenza dell'HSTS sono impostate su un anno per impostazione predefinita e non includono sottodomini, il che probabilmente va bene per la maggior parte delle applicazioni. È possibile configurare questa con l'opzione hsts
:
config.hsts = {
expires: 1.month.to_i,
subdomains: false,
}
se si sta eseguendo Rails 3 (> = 3.1) o non vogliono usare https per l'intera applicazione, quindi è possibile utilizzare il metodo force_ssl
in un controllore:
class SecureController < ApplicationController
force_ssl
end
Questo è tutto. Puoi impostarlo per controller o nel tuo ApplicationController
. È possibile forzare https in modo condizionale utilizzando le familiari opzioni if
o unless
; ad esempio:
# Only when we're not in development or tests
force_ssl unless: -> { Rails.env.in? ['development', 'test'] }
Posso ottenere un chiarimento sulla tua domanda. Vuoi forzare le persone a utilizzare sempre HTTPS sul tuo sito o solo per alcuni URL? Essere predefinito RAILS continuerà a utilizzare l'HTTPS se la richiesta corrente è HTTPS. – scottd