Action Dispatch SSL¶ ↑
当 config.force_ssl = true 时,此中间件将被添加到堆栈中,并传入 config.ssl_options 中设置的选项。它执行三项任务来强制执行安全的 HTTP 请求。
-
TLS 重定向:将
http://请求永久重定向到具有相同 URL 主机、路径等的https://。默认启用。设置config.ssl_options来修改目标 URL。config.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 }的快捷方式。 -