繁体   English   中英

force_ssl 在 Rails 中有什么作用?

[英]What does force_ssl do in Rails?

在上一个问题中,我发现我应该设置 nginx ssl 终止,而不是让 Rails 处理加密数据。

那么为什么会存在以下情况呢?

config.force_ssl = true

我看到这在生产配置文件中被注释掉了。 但是,如果期望 nginx 将处理所有 ssl 内容,以便我的 Rails 应用程序不处理加密数据,那么config.force_ssl = true做什么?

如果我知道我将一直使用 nginx,我应该在生产中将其注释掉吗?

它不只是强制您的浏览器将 HTTP 重定向到 HTTPS。 它还会将您的 cookie 设置为标记为“安全”,并启用HSTS ,每个都是针对 SSL 剥离的非常好的保护。

尽管 HTTPS 保护“ https://example.com/yourapp ”上的应用程序免受 MITM 攻击,但如果有人在您的客户端和您的服务器之间进入,他们可以很容易地让您访问“ http://example.com/yourapp ” . 如果没有上述保护措施,您的浏览器将很乐意将会话 cookie 发送给执行 MITM 的人。

设置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_options设置为secure_cookies: false以禁用此功能。

  3. HTTP 严格传输安全 (HSTS):告诉浏览器将此站点记住为仅 TLS 并自动重定向非 TLS 请求 默认启用。 使用hsts: false配置config.ssl_options以禁用。 使用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: falsehsts: { expires: 0 }的快捷方式。

请求可以使用exclude选择退出重定向:

config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }

此设置通过将 HTTP 请求重定向到其对应的 HTTPS 来强制使用 HTTPS。 因此,访问http://domain.com/path的浏览器将被重定向到https://domain.com/path

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

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

它强制与服务器的所有通信都加密并使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM