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::SSL
。 ActionDispatch::SSL
文档描述了如下function(为了清楚起见,添加了重点):
在这里查看包括这里和ActionDispatch :: SSL的文档。
DOCS
当config.force_ssl = true
,这个中间件被添加到堆栈中,并传递config.ssl_options
设置的选项。 它执行三个工作来执行安全的HTTP请求:
-
TLSredirect:使用相同的URL主机,path等将http://请求永久redirect到https:// 。默认情况下启用。 设置
config.ssl_options
来修改目标URL(例如redirect: { host: "secure.widgets.com", port: 8080 }
),或者设置redirect: false
来禁用此function。 -
安全cookie: 设置 cookie上的
secure
标志告诉浏览器,它们不能和http://请求一起发送。 默认启用。 使用secure_cookies: false
设置config.ssl_options
以禁用此function。 -
HTTP严格传输安全(HSTS): 告诉浏览器将此站点记为TLS,并自动redirect非TLS请求 。 默认启用。 使用
hsts: false
configurationconfig.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: false
是hsts: false
的快捷方式hsts: { expires: 0 }
。
-
请求可以select不使用exclude
redirect:
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?鉴于=评论