以前の 質問 では、nginx ssl終了を設定し、Rails暗号化されたデータを処理しないようにする必要があります。
次に、なぜ次のものが存在しますか?
config.force_ssl = true
これは、運用構成ファイルでコメント化されています。しかし、nginxがすべてのsslを処理して、my Rails appが暗号化されたデータを処理しないようにすると、config.force_ssl = true
はどうなりますか?
常にnginxを使用することがわかっている場合は、本番環境でコメントアウトしておく必要がありますか?
ブラウザを強制的にHTTPからHTTPSにリダイレクトするjustはしません。また、Cookieを「安全」とマークするように設定し、 [〜#〜] hsts [〜#〜] を有効にします。これらはそれぞれ、SSLストリッピングに対する非常に優れた保護です。
HTTPSは「 https://example.com/yourapp 」でアプリをMITM攻撃から保護しますが、誰かがクライアントとサーバーの間に侵入すると、かなり簡単にアクセスできます」 http://example.com/yourapp "。上記の保護のいずれも使用しない場合、ブラウザはセッションCookieをMITMを実行している人に喜んで送信します。
config.force_ssl
を設定すると、ActionDispatch::SSL
が含まれます。 ActionDispatch::SSL
のドキュメントでは、機能を次のように説明しています(わかりやすくするために、強調を追加)
Include here およびActionDispatch :: SSL here のドキュメントを参照してください。
このミドルウェアは、config.force_ssl = true
のときにスタックに追加され、config.ssl_options
で設定されたオプションが渡されます。安全なHTTPリクエストを実施するために3つのジョブを実行します。
TLSリダイレクト:同じURLホスト、パスなどを使用して、http://要求をhttps://に永続的にリダイレクトします。デフォルトで有効になっています。 config.ssl_options
を設定してリンク先URLを変更する(例:redirect: { Host: "secure.widgets.com", port: 8080 }
)、またはredirect: false
を設定してこの機能を無効にします。
セキュアCookie:Cookieにsecure
フラグを設定して、ブラウザにhttp://リクエストと共に送信してはならないことを通知します。デフォルトで有効になっています。この機能を無効にするには、config.ssl_options
をsecure_cookies: false
に設定します。
HTTP Strict Transport Security(HSTS):このサイトをTLSのみとして記憶し、非TLS要求を自動的にリダイレクトするようブラウザに指示します。デフォルトで有効になっています。 config.ssl_options
でhsts: false
を構成して無効にします。 config.ssl_options
にhsts: { … }
を設定してHSTSを構成します。
expires
:これらの設定が保持される秒数。デフォルトは180.days
(推奨)です。ブラウザのプリロードリストの資格を得るために最低限必要なのは18.weeks
です。subdomains
:true
に設定すると、これらの設定をすべてのサブドメインに適用するようブラウザーに指示します。これにより、サブドメインの脆弱なサイトによる傍受からCookieが保護されます。デフォルトはtrue
です。preload
:このサイトがブラウザーのプリロードされたHSTSリストに含まれている可能性があることを宣伝します。 HSTSは、訪問するたびにサイトを保護します最初の訪問を除く HSTSヘッダーがまだ表示されていないためです。このギャップを埋めるために、ブラウザーベンダーにはHSTS対応サイトの焼き付けリストが含まれています。 https://hstspreload.appspot.com にアクセスして、サイトを登録のために送信します。 HSTSをオフにするには、ヘッダーを省略するだけでは不十分です。ブラウザは、期限が切れるまで元のHSTSディレクティブを記憶します。代わりに、ヘッダーを使用して、ブラウザーにHSTSをすぐに期限切れにするように指示します。 hsts: false
の設定は、hsts: { expires: 0 }
のショートカットです。リクエストは、exclude
を使用してリダイレクトをオプトアウトできます。
config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }
この設定は、HTTP要求を対応するHTTPSにリダイレクトすることにより、HTTPSを強制します。したがって、http://domain.com/path
にアクセスするブラウザはhttps://domain.com/path
にリダイレクトされます。
設定をコメントアウトのままにすると、両方のプロトコルが許可されます。
HTTPS要求を処理するようにWebサーバーを構成する必要があります。
サーバーとのすべての通信を強制的に暗号化し、SSLを使用します。つまり、HTTPSを使用します。
コントローラに含めると、そのコントローラはHTTPSリクエストのみを受け入れます。
便利なリンク: