Nginx-HTTP Strict Transport Security(HSTS)


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 標准的一部分,也不該被當作正式的內容。

示例

現在和未來的所有子域名會自動使用 HTTPS 連接長達一年。同時阻止了只能通過 HTTP 訪問的內容。

Strict-Transport-Security: max-age=31536000; includeSubDomains

規范

規范 狀態 注釋
HTTP Strict Transport Security (HSTS) IETF RFC Initial definition


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM