Action Dispatch SSL
當 config.force_ssl = true
時,此中間件會被加入到串列中,並傳遞在 config.ssl_options
中設定的選項。它執行三個工作來強化 HTTP 要求的安全性
-
TLS 轉址:將
http://
要求永久轉址到有著相同 URL 主機、路徑等的https://
。預設啟用。設定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 }
。 -