HTTP Strict Transport Security(HSTS)
HTTP Strict Transport Security
(通常簡稱為HSTS)是一個安全功能,它告訴瀏覽器只能通過HTTPS訪問當前資源,而不是HTTP。
HSTS的作用是強制客戶端(如瀏覽器)使用HTTPS與服務器創建連接。服務器開啟HSTS的方法是,當客戶端通過HTTPS發出請求時,在服務器返回的超文本傳輸協議響應頭中包含Strict-Transport-Security字段。非加密傳輸時設置的HSTS字段無效。
比如,https://xxx 的響應頭含有Strict-Transport-Security: max-age=31536000; includeSubDomains。這意味着兩點:
在接下來的一年(即31536000秒)中,瀏覽器只要向xxx或其子域名發送HTTP請求時,必須采用HTTPS來發起連接。比如,用戶點擊超鏈接或在地址欄輸入 http://xxx/ ,瀏覽器應當自動將 http 轉寫成 https,然后直接向 https://xxx/ 發送請求。
Header type | Response header |
---|---|
Forbidden header name | no |
語法
Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload
指令
-
max-age=<expire-time>
設置在瀏覽器收到這個請求后的
秒的時間內凡是訪問這個域名下的請求都使用HTTPS請求。 -
includeSubDomains
可選如果這個可選的參數被指定,那么說明此規則也適用於該網站的所有子域名。
-
preload
可選查看 預加載 HSTS 獲得詳情。不是標准的一部分。
描述
一個網站接受一個HTTP的請求,然后跳轉到HTTPS,用戶可能在開始跳轉前,通過沒有加密的方式和服務器對話,比如,用戶輸入http://foo.com或者直接foo.com。
這樣存在中間人攻擊潛在威脅,跳轉過程可能被惡意網站利用來直接接觸用戶信息,而不是原來的加密信息。
網站通過HTTP Strict Transport Security通知瀏覽器,這個網站禁止使用HTTP方式加載,瀏覽器應該自動把所有嘗試使用HTTP的請求自動替換為HTTPS請求。
注意: Strict-Transport-Security
在通過 HTTP 訪問時會被瀏覽器忽略; 因為攻擊者可以通過中間人攻擊的方式在連接中修改、注入或刪除它. 只有在你的網站通過HTTPS訪問並且沒有證書錯誤時, 瀏覽器才認為你的網站支持HTTPS 然后使用 Strict-Transport-Security
的值 .
瀏覽器如何處理
你的網站第一次通過HTTPS請求,服務器響應Strict-Transport-Security
頭,瀏覽器記錄下這些信息,然后后面嘗試訪問這個網站的請求都會自動把HTTP替換為HTTPS。
當HSTS頭設置的過期時間到了,后面通過HTTP的訪問恢復到正常模式,不會再自動跳轉到HTTPS。
每次瀏覽器接收到Strict-Transport-Security頭,它都會更新這個網站的過期時間,所以網站可以刷新這些信息,防止過期發生。
Chrome、Firefox等瀏覽器里,當您嘗試訪問該域名下的內容時,會產生一個307 Internal Redirect(內部跳轉),自動跳轉到HTTPS請求。
示例場景
你連接到一個免費WiFi接入點,然后開始瀏覽網站,訪問你的網上銀行,查看你的支出,並且支付一些訂單。很不幸,你接入的WiFi實際上是黑客的筆記本熱點,他們攔截了你最初的HTTP請求,然后跳轉到一個你銀行網站一模一樣的釣魚網站。 現在,你的隱私數據暴露給黑客了。
Strict Transport Security解決了這個問題;只要你通過HTTPS請求訪問銀行網站,並且銀行網站配置好Strict Transport Security,你的瀏覽器知道自動使用HTTPS請求,這可以阻止黑客的中間人攻擊的把戲。
預加載 HSTS
谷歌維護着一個 HSTS 預加載服務。按照如下指示成功提交你的域名后,瀏覽器將會永不使用非安全的方式連接到你的域名。雖然該服務是由谷歌提供的,但所有瀏覽器都有使用這份列表的意向(或者已經在用了)。但是,這不是 HSTS 標准的一部分,也不該被當作正式的內容。
- Chrome & Chromium 的 HSTS 預加載列表: https://www.chromium.org/hsts
- Firefox 的 HSTS 預加載列表:nsSTSPreloadList.inc
示例
現在和未來的所有子域名會自動使用 HTTPS 連接長達一年。同時阻止了只能通過 HTTP 訪問的內容。
Strict-Transport-Security: max-age=31536000; includeSubDomains
規范
規范 | 狀態 | 注釋 |
---|---|---|
HTTP Strict Transport Security (HSTS) | IETF RFC | Initial definition |