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 请求:

  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_optionssecure_cookies: false禁用此功能。

  3. HTTP 严格传输安全 (HSTS):告诉浏览器将此站点记住为 TLS-only 并自动重定向非 TLS 请求。默认启用。配置config.ssl_optionshsts: false禁用。设置config.ssl_optionshsts: { … }配置 HSTS:

    • expires:这些设置会持续多长时间(以秒为单位)。默认为 180.days(推荐)。符合浏览器预加载列表的最低要求是18.weeks.
    • subdomains:设置为true告诉浏览器将这些设置应用于所有子域。这可以保护您的 cookie 免受子域上易受攻击的站点的拦截。默认为true.
    • preload: 宣传本网站可能包含在浏览器的预加载 HSTS 列表中。HSTS 会在每次访问时保护您的网站,但第一次访问除外,因为它还没有看到您的 HSTS 标头。为了缩小这一差距,浏览器供应商提供了一个支持 HSTS 的站点的内置列表。转到https://hstspreload.appspot.com提交您的网站以供收录。要关闭 HSTS,省略标头是不够的。浏览器会记住原始的 HSTS 指令,直到它过期。相反,使用标头告诉浏览器立即使 HSTS 过期。设置hsts: falsehsts: { 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.

将设置注释掉将允许这两种协议。

您仍然需要配置您的 Web 服务器来处理 HTTPS 请求。

于 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 回答