web-dev-qa-db-ja.com

Railsでforce_sslは何をしますか?

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

次に、なぜ次のものが存在しますか?

config.force_ssl = true

これは、運用構成ファイルでコメント化されています。しかし、nginxがすべてのsslを処理して、my Rails appが暗号化されたデータを処理しないようにすると、config.force_ssl = trueはどうなりますか?

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

77
user782220

ブラウザを強制的にHTTPからHTTPSにリダイレクトするjustはしません。また、Cookieを「安全」とマークするように設定し、 [〜#〜] hsts [〜#〜] を有効にします。これらはそれぞれ、SSLストリッピングに対する非常に優れた保護です。

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

72
Dan Jameson

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

Include here およびActionDispatch :: SSL here のドキュメントを参照してください。

DOCS

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

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

  2. セキュアCookie:Cookieにsecureフラグを設定して、ブラウザにhttp://リクエストと共に送信してはならないことを通知します。デフォルトで有効になっています。この機能を無効にするには、config.ssl_optionssecure_cookies: falseに設定します。

  3. HTTP Strict Transport Security(HSTS):このサイトをTLSのみとして記憶し、非TLS要求を自動的にリダイレクトするようブラウザに指示します。デフォルトで有効になっています。 config.ssl_optionshsts: falseを構成して無効にします。 config.ssl_optionshsts: { … }を設定してHSTSを構成します。

    • expires:これらの設定が保持される秒数。デフォルトは180.days(推奨)です。ブラウザのプリロードリストの資格を得るために最低限必要なのは18.weeksです。
    • subdomainstrueに設定すると、これらの設定をすべてのサブドメインに適用するようブラウザーに指示します。これにより、サブドメインの脆弱なサイトによる傍受から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/ } } }
49
steel

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

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

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

10
Stefan

サーバーとのすべての通信を強制的に暗号化し、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
3
Richard Jordan