HSTS 詳解,讓 HTTPS 更安全

隨着互聯網的快速發展,人們在生活中愈來愈離不開互聯網。不管是社交、購物仍是搜索,互聯網都能給人帶來不少的便捷。與此同時,因爲用戶對網絡安全的不瞭解和一些網站、協議的安全漏洞,讓不少用戶的我的信息數據「裸露」在互聯網中。爲此谷歌在 Chrome 68 版本後,其界面將會讓使用者更容易瞭解 HTTP 網頁是不安全的,並持續推進網站預設使用 HTTPS。但 HTTP 依舊能夠訪問使用,爲此一些網站能夠設置 HSTS 策略,以此來強制瀏覽器使用 HTTPS 與網站通訊,來保障網站更加安全。html

多了 SSL 層的 HTTP 協議

在聊 HSTS 以前,先來簡單說下 HTTPS。簡而言之,HTTPS 就是在 HTTP 下加入了 SSL 層,從而保護了交換數據隱私和完整性,提供對網站服務器身份認證的功能,簡單來講它就是安全版的 HTTP。通常來講,HTTPS 主要用途有三個:一是經過證書等信息確認網站的真實性;二是創建加密的信息通道;三是數據內容的完整性。瀏覽器

圖中是HTTPS的握手流程,相比 HTTP,HTTPS 傳輸更加安全。緩存

  • 全部信息都是加密傳播,黑客沒法竊聽。
  • 具備校驗機制,一旦被篡改,通訊雙方會馬上發現。
  • 配備身份證書,防止身份被冒充。

強制 HTTPS,保障數據安全

HSTS(HTTP Strcit-Transport-Securit)即 HTTP 嚴格傳輸安全, 是一種 Web 安全策略機制,可保護網站免受協議降級攻擊和 cookie 劫持、中間人攻擊。它容許 Web 服務器聲明瀏覽器(或其餘符合要求的用戶代理)應用使用安全的 HTTPS 鏈接與交互,而不是經過不安全的 HTTP 協議。安全

使用 HSTS 策略後,在緩存時間內,對應的域名請求都將會自動轉換爲安全的 HTTPS 方法。若瀏覽器使用 HTTP 訪問時,瀏覽器內部會經過 307 跳轉爲 HTTPS 訪問,並添加響頭 Non-Authorizatative-Reason:HSTS。並在 200 響應頭字段返回 strict-transport-security: max-age=127800(2 天-自定義)。服務器

與此同時,若用戶訪問到不安全的 HTTPS 網站時,瀏覽器會提示用戶當前訪問的網站不安全且禁止用戶訪問。若是僅使用 HTTPS 協議,雖然它也會提醒訪問的網站的安全性存在問題,但依然能夠經過忽略危險進行訪問。使用 HSTS 策略後,瀏覽器會終止任何和全部安全傳輸錯誤或警告的任何安全傳輸鏈接嘗試。也就不能忽略瀏覽器的不安全提示,沒法進行不安全的訪問鏈接,從而進一步保證用戶的數據安全。cookie

image

啓用 HSTS 後,使用 HTTPS 訪問後會在響應頭添加 HSTS 響應字段:網絡

Strict-Transport-Security: max-age=ExpireTime [;includeSubDomains][; preload]測試

其中 max-age 是必選參數,能夠是 ‘0’ 以上的任何值,通常設定緩存 180 天。這個變量定義HSTS 響應頭在瀏覽器中的緩存時間。網站

Strict-Transport-Security: max-age=15552000編碼

[includeSubDomains] 是可選參數,表示瀏覽器將此策略應用於當前域名的全部子域。

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

[repload] 也是可選參數,表示使用 preload 預加載功能,此域名贊成申請加入瀏覽器發發起的 Preload List。

Strict-Transport-Security: max-age=15552000; includeSubDomains; preload

HSTS 預加載,讓安全無漏洞

須要注意的是,HSTS 協議必須是已經使用 HTTPS 訪問而且緩存到瀏覽器時纔會生效策略,若是用戶使用的是 HTTP 協議或直接輸入域名(瀏覽器默認使用 HTTP)的方式進行訪問。如www.example.com , www.example.com 。雖然能夠經過 301 等跳轉將 HTTP 跳轉到 HTTPS,但跳轉使用的 HTTP 明文傳輸,這就給中間人攻擊提供了可能。它能夠在使用 HTTP 傳輸時對跳轉信息的信息進行劫持,從而將跳轉頁面指向攻擊者指定的頁面。並且 301 跳轉不會出現警示信息,客戶端很容易在不知情的狀況下被攻擊劫持。

image

這時咱們就可使用 HSTS 的預加載功能,預加載能夠將指定域名添加到 Preload List 名單中,添加到 Preload List 名單後,瀏覽器就只能經過 HTTPS 方法來進行訪問,從而杜絕 HTTP 訪問時被這類攻擊的可能。您能夠經過訪問hstspreload.org/ 提交域名申請。但須要注意的是,添加後的域名將會硬編碼到瀏覽器內,除非能保證域名會長久使用 HTTPS,不然請勿隨意加入 Preload List。

HSTS 讓網站安全等級更高一層

開啓 HSTS 後,在 ssllabs 上進行測試,網站的安全等級會從 A 升級至 A+。

開啓前等級爲:A

開啓後等級變爲:A+

又拍雲也提供HTTPS安全等級檢測,有興趣的小夥伴可前往:www.upyun.com/https 嘗試下。

Chrome、Safari、Firefox 等瀏覽器都已經開始相繼支持 HSTS,下圖爲各大瀏覽器對 HSTS 的支持狀況(對於不支持的瀏覽器,又拍雲會忽略此響應頭,對用戶的訪問無影響):

對於那些安全性要求較高的網站,啓用 HSTS 無疑是不錯的選擇。當用戶訪問網站域名時,都可以讓用戶使用 HTTPS 來請求網站資源,能夠更加有效地保護網站和用戶的數據安全,而且減小用戶等待 301/302 的跳轉時間,帶來更好的用戶體驗。

推薦閱讀:

當 「HTTP」 先生趕上「S」小姐

瞭解 HTTPS,讀這篇文章就夠了​

相關文章
相關標籤/搜索