96

以前の質問で、nginx ssl 終了を設定し、Rails が暗号化されたデータを処理しないようにする必要があることがわかりました。

では、なぜ次のものが存在するのでしょうか。

config.force_ssl = true

これは、プロダクション構成ファイルでコメントアウトされています。しかし、nginx がすべての ssl を処理して、私の Rails アプリが暗号化されたデータを処理しないようにすることが期待されている場合、どうすればconfig.force_ssl = trueよいでしょうか?

常にnginxを使用することがわかっている場合、本番環境でコメントアウトしたままにする必要がありますか?

4

4 に答える 4

80

ブラウザに HTTP を HTTPS にリダイレクトさせるだけではありません。また、Cookie を「安全」とマークするように設定し、HSTSを有効にします。これらはそれぞれ、SSL ストリッピングに対する非常に優れた保護機能です。

HTTPS は " https://example.com/yourapp " のアプリを MITM 攻撃から保護しますが、誰かがあなたのクライアントとサーバーの間に侵入した場合、" http://example.com/yourapp "に簡単にアクセスさせることができます。 . 上記の保護のどちらも使用しない場合、ブラウザはセッション Cookie を MITM を実行している人物に喜んで送信します。

于 2014-11-04T15:04:00.013 に答える
64

設定config.force_sslが含まれていActionDispatch::SSLます。ドキュメントでは、機能を次のActionDispatch::SSLように説明しています (明確にするために強調を加えています)。

こちらのインクルードと ActionDispatch::SSL のドキュメントはこちらをご覧ください

ドキュメント

このミドルウェアは、 でスタックに追加され、config.force_ssl = trueで設定されたオプションが渡されますconfig.ssl_options。安全な HTTP リクエストを適用するために、次の 3 つのジョブを実行します。

  1. TLS リダイレクト: http:// 要求を 、同じ URL ホスト、パスなどを使用して https:// に永続的にリダイレクトします。デフォルトで有効になっています。config.ssl_options 宛先 URL (例: redirect: { host: "secure.widgets.com", port: 8080 }) を変更するように設定するか、redirect: falseこの機能を無効にするように設定します。

  2. 安全な Cookie: Cookie にフラグを設定しsecureて、http:// 要求と一緒に送信してはならないことをブラウザーに伝えます。デフォルトで有効になっています。この機能を無効にするには、 で設定 config.ssl_optionsします。secure_cookies: false

  3. HTTP Strict Transport Security (HSTS):このサイトを TLS のみとして記憶し、TLS 以外のリクエストを自動的にリダイレクトするようにブラウザに指示します。デフォルトで有効になっています。で構成config.ssl_optionshsts: falseて無効にします。HSTS を構成するには、次のように設定config.ssl_optionsします。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/ } } }
于 2016-09-13T17:57:16.980 に答える
12

この設定は、HTTP 要求を対応する HTTPS にリダイレクトすることにより、HTTPS を強制します。そのため、ブラウザにアクセスhttp://domain.com/pathすると にリダイレクトされhttps://domain.com/pathます。

設定をコメントアウトしたままにすると、両方のプロトコルが許可されます。

HTTPS 要求を処理するように Web サーバーを構成する必要があります。

于 2013-03-28T08:13:56.993 に答える
5

サーバーとのすべての通信を強制的に暗号化し、SSL (HTTPS 経由) を使用します。

コントローラーに含めると、そのコントローラーは HTTPS 要求のみを受け入れます。

便利なリンク:

  1. http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html
  2. http://rubydoc.info/docs/rails/ActionController/ForceSSL
  3. http://railscasts.com/episodes/270-authentication-in-rails-3-1?view=comments
于 2013-03-28T07:52:26.380 に答える