跳至内容 跳至搜索

Action Dispatch SSL

config.force_ssl = true 时,此中间件将被添加到堆栈中,并传递在 config.ssl_options 中设置的选项。它执行三个任务来强制执行安全的 HTTP 请求

  1. TLS 重定向:将 http:// 请求永久重定向到 https://,URL 主机、路径等保持不变。默认情况下启用。设置 config.ssl_options 以修改目标 URL(例如 redirect: { host: "secure.widgets.com", port: 8080 }),或设置 redirect: false 以禁用此功能。

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

    config.ssl_options = { redirect: { exclude: -> request { /healthcheck/.match?(request.path) } } }
    

    Cookies 将不会被标记为对排除的请求安全。

  2. 安全 Cookie:在 Cookie 上设置 secure 标志,告诉浏览器它们不得与 http:// 请求一起发送。默认情况下启用。使用 secure_cookies: false 设置 config.ssl_options 以禁用此功能。

  3. 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: falsehsts: { expires: 0 } 的快捷方式。