Action Dispatch SSL
当 config.force_ssl = true
时,此中间件将被添加到堆栈中,并被传递 config.ssl_options
中设置的选项。它执行三个任务来强制执行安全的 HTTP 请求
-
TLS 重定向:永久地将
http://
请求重定向到https://
,其 URL 主机、路径等相同。默认情况下启用。设置config.ssl_options
来修改目标 URLconfig.ssl_options = { redirect: { host: "secure.widgets.com", port: 8080 }`
或者设置
redirect: false
来禁用重定向。请求可以使用
exclude
选项来退出重定向config.ssl_options = { redirect: { exclude: -> request { request.path == "/up" } } }
Cookies
不会被标记为对排除的请求安全。当通过终止
SSL
的负载均衡器代理时,转发请求将看起来像是 HTTP 而不是 HTTPS 到应用程序。这会导致重定向和 Cookie 安全目标 HTTP 而不是 HTTPS。为了使服务器假定代理已经终止了SSL
,并且请求确实是 HTTPS,请将config.assume_ssl
设置为true
config.assume_ssl = true
-
安全 Cookie:在 Cookie 上设置
secure
标志,告诉浏览器它们不能与http://
请求一起发送。默认情况下启用。使用secure_cookies: false
设置config.ssl_options
来禁用此功能。 -
HTTP 严格传输安全 (HSTS):告诉浏览器记住此站点为 TLS 专用,并自动将非 TLS 请求重定向。默认情况下启用。使用
hsts: false
配置config.ssl_options
来禁用。使用
hsts: { ... }
设置config.ssl_options
来配置 HSTS-
expires
:这些设置将持续多长时间(以秒为单位)。满足浏览器预加载列表所需的最低时间为 1 年。默认为 2 年(推荐)。 -
subdomains
:设置为true
以告诉浏览器将这些设置应用于所有子域。这可以保护您的 Cookie 免受子域上易受攻击网站的拦截。默认为true
。 -
preload
:宣传此站点可能会包含在浏览器的预加载 HSTS 列表中。HSTS 在每次访问时都保护您的网站,除了第一次访问,因为它还没有看到您的 HSTS 标头。为了弥合这一差距,浏览器供应商包含了一个内置的 HSTS 启用站点列表。访问 hstspreload.org 提交您的站点以供包含。默认为false
。
要关闭 HSTS,省略标头是不够的。浏览器会记住原始的 HSTS 指令,直到它过期。相反,使用标头告诉浏览器立即过期 HSTS。设置
hsts: false
是hsts: { expires: 0 }
的快捷方式。 -