Wenn Sie Ihre gesamte Anwendung über https bereitgestellt wird dann seit Rails 4.0 der beste Weg, dies zu tun ist force_ssl
in der Konfigurationsdatei zu ermöglichen, etwa so:
# 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
standardmäßig diese Option ist bereits in config/environments/production.rb
in neu generierten Apps vorhanden, ist aber auskommentiert.
Wie der Kommentar sagt, wird dies nicht nur zu https umleiten, sondern setzt auch die Strict-Transport-Security
Header() und stellt sicher, dass die sichere Flagge auf alle Cookies gesetzt ist. Beide Maßnahmen erhöhen die Sicherheit Ihrer Anwendung ohne wesentliche Nachteile. Es verwendet ActionDispatch:SSL
.
Die HSTS-Ablaufeinstellungen sind standardmäßig auf ein Jahr eingestellt und enthalten keine Subdomains, was wahrscheinlich für die meisten Anwendungen in Ordnung ist. Sie können diese Konfiguration mit der hsts
Option:
config.hsts = {
expires: 1.month.to_i,
subdomains: false,
}
Wenn Sie mit Rails 3 (> = 3.1) oder wollen nicht für die gesamte Anwendung https verwenden, dann können Sie verwenden die force_ssl
Verfahren in einem Controller:
class SecureController < ApplicationController
force_ssl
end
das ist alles. Sie können es pro Controller einstellen, oder in Ihrem ApplicationController
. Sie können HTTPS unter Verwendung der bekannten Optionen if
oder unless
erzwingen. Zum Beispiel:
# Only when we're not in development or tests
force_ssl unless: -> { Rails.env.in? ['development', 'test'] }
Kann ich eine Klärung Ihrer Frage bekommen. Möchten Sie die Verwendung von HTTPS auf Ihrer Website oder nur für einige URLs erzwingen? Als Standard verwenden RAILS weiterhin HTTPS, wenn die aktuelle Anforderung HTTPS ist. – scottd