アプリケーション全体をhttps経由で提供する場合、Rails 4.0以降、これを行うための最良の方法は、force_ssl
次のように構成ファイルで有効にすることです。
# 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
デフォルトでは、このオプションはconfig/environments/production.rb
新しく生成されたアプリにすでに存在しますが、コメントアウトされています。
コメントにあるように、これはhttpsにリダイレクトするだけでなく、Strict-Transport-Security
ヘッダー(HSTS)を設定し、すべてのCookieにセキュアフラグが設定されていることを確認します。どちらの方法でも、重大な欠点なしにアプリケーションのセキュリティが向上します。を使用しActionDispatch:SSL
ます。
HSTSの有効期限設定は、デフォルトで1年に設定されており、サブドメインは含まれていません。これは、ほとんどのアプリケーションでおそらく問題ありません。hsts
これは、次のオプションで構成できます。
config.hsts = {
expires: 1.month.to_i,
subdomains: false,
}
Rails 3(> = 3.1)を実行している場合、またはアプリケーション全体でhttpsを使用したくない場合はforce_ssl
、コントローラーでこのメソッドを使用できます。
class SecureController < ApplicationController
force_ssl
end
それで全部です。コントローラごと、またはで設定できますApplicationController
。if
おなじみのオプションまたはunless
オプションを使用して、条件付きでhttpsを強制できます。例えば:
# Only when we're not in development or tests
force_ssl unless: -> { Rails.env.in? ['development', 'test'] }