force_ssl在Rails中做了什么?

在前面的问题中,我发现我应该设置nginx ssl终止,而不是让Rails处理encryption的数据。

那么为什么存在?

config.force_ssl = true 

我在生产configuration文件中看到了这个注释。 但是,如果期望是nginx将处理所有ssl的东西,以便我的rails应用程序不处理encryption的数据那么config.force_ssl = true做什么?

如果我知道我会一直使用nginx,我应该把它留在生产中吗?

它不只是强制你的浏览器将HTTPredirect到HTTPS。 它也设置你的cookies被标记为“安全”,它使HSTS ,每一个都是非常好的保护,防止SSL剥离。

即使HTTPS通过“ https://example.com/yourapp ”保护您的应用程序免受MITM攻击,但如果有人在您的客户端和服务器之间进行访问,他们可以轻松访问“ http://example.com/yourapp ” 。 没有上述保护,您的浏览器将愉快地发送会话cookie给做MITM的人。

设置config.force_ssl包括ActionDispatch::SSLActionDispatch::SSL文档描述了如下function(为了清楚起见,添加了重点):

在这里查看包括这里和ActionDispatch :: SSL的文档。

DOCS

config.force_ssl = true ,这个中间件被添加到堆栈中,并传递config.ssl_options设置的选项。 它执行三个工作来执行安全的HTTP请求:

  1. TLSredirect:使用相同的URL主机,path等将http://请求永久redirect到https:// 。默认情况下启用。 设置config.ssl_options来修改目标URL(例如redirect: { host: "secure.widgets.com", port: 8080 } ),或者设置redirect: false来禁用此function。

  2. 安全cookie: 设置 cookie上secure标志告诉浏览器,它们不能和http://请求一起发送。 默认启用。 使用secure_cookies: false设置config.ssl_options以禁用此function。

  3. HTTP严格传输安全(HSTS): 告诉浏览器将此站点记为TLS,并自动redirect非TLS请求 。 默认启用。 使用hsts: falseconfigurationconfig.ssl_options hsts: false以禁用。 使用hsts: { … }设置config.ssl_options来configurationHSTS:

    • expires :以秒为单位,这些设置将坚持多久。 默认为180.days (推荐)。 符合浏览器预加载列表的最低要求为18.weeks
    • subdomains :设置为true ,通知浏览器将这些设置应用于所有子域。 这可以保护您的Cookie免受子域上易受攻击的网站的拦截。 默认为true
    • preload :广告本网站可能包含在浏览器的预先载入的HSTS列表中。 除了第一次访问, HSTS保护您的网站,因为它还没有看到您的HSTS头。 为了缩小这个差距,浏览器供应商包括一个支持HSTS的网站列表。 转到https://hstspreload.appspot.com提交您的网站列入。; 要closuresHSTS,省略标题是不够的。 浏览器将记住原始的HSTS指令,直到它到期。 相反,使用头来告诉浏览器立即过期HSTS。 设置hsts: falsehsts: false的快捷方式hsts: { expires: 0 }

请求可以select不使用excluderedirect:

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

此设置通过将HTTP请求redirect到其HTTPS对等方来强制HTTPS。 所以访问http://domain.com/path的浏览器将被redirect到https://domain.com/path

离开设置注释将允许这两个协议。

您仍然必须configuration您的Web服务器来处理HTTPS请求。

它强制所有与服务器的通信被encryption,并使用ssl – 即https

当您将其包含在控制器中时,控制器将只接受https请求。

有用的url:

http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html http://rubydoc.info/docs/rails/ActionController/ForceSSL http://railscasts.com/episodes/270-authentication-in- Rails的3-1?鉴于=评论