Web 安全之 HSTS 詳解和使用
HSTS(HTTP Strict Transport Security) 是一種網(wǎng)絡(luò)安全機(jī)制,可用于防范網(wǎng)絡(luò)攻擊,例如中間人攻擊和 CSRF(Cross-Site Request Forgery)等攻擊。本文將詳細(xì)介紹 HSTS 的工作原理、應(yīng)用場景以及如何在網(wǎng)站中開啟 HSTS 。
HSTS 工作原理
HSTS 原理是當(dāng)瀏覽器請求網(wǎng)站服務(wù)器資源時,服務(wù)器會返回包含“Strict-Transport-Security” HTTP 響應(yīng)頭的響應(yīng)內(nèi)容,用來告訴瀏覽器在接下的訪問中必須使用 HTTPS 而不是 HTTP 協(xié)議與該網(wǎng)站服務(wù)器通信。瀏覽器會在本地緩存這些信息一段時間,一般為六個月。
啟用 HSTS 后,發(fā)送 HTTP 請求時,瀏覽器會自動檢查有沒有設(shè)置過 HSTS,如果設(shè)置過,則會將 HTTP 升級為 HTTPS 請求(如果服務(wù)器的 HTTPS 證書無效了,例如證書過期、使用了自簽名證書等,瀏覽器會終止連接)。
原理圖如下:
HSTS 原理
HSTS 的作用是強(qiáng)制瀏覽器使用 HTTPS 訪問服務(wù)器。只有當(dāng)客戶端通過 HTTPS 發(fā)出請求時,收到的服務(wù)器的響應(yīng)頭中包含了 Strict-Transport-Security 字段才會生效。非 HTTPS 訪問的響應(yīng)頭中設(shè)置的 HSTS 不會生效。
HSTS 的安全作用
- 提高網(wǎng)站安全性,通過設(shè)置 HSTS 強(qiáng)制瀏覽器使用 HTTPS 協(xié)議,可以有效防止中間人攻擊和 Cross-Site Request Forgery 等攻擊。
- 保護(hù)數(shù)據(jù)的傳輸安全,因為使用 HTTPS 協(xié)議可以防止數(shù)據(jù)在傳輸過程中被攻擊者劫持。
如何配置 HSTS ?
- 為 WEB 服務(wù)器配置好 HTTPS 協(xié)議和證書,最好使用權(quán)威的 CA 證書,具體的配置方法就不詳細(xì)說明了,可以自行搜索自己使用的 WEB 服務(wù)器對應(yīng)的 HTTPS 配置方法(強(qiáng)調(diào)一點,盡量使用 TLS1.2 及以上版本)。
- 在 WEB 服務(wù)器上正確設(shè)置 HTTP Strict-Transport-Security 響應(yīng)頭,在網(wǎng)站的 HTTP 響應(yīng)頭中設(shè)置 HTTP Strict-Transport-Security 頭,可以告訴瀏覽器將該網(wǎng)站重定向到 HTTPS 協(xié)議,可以自行搜索自己使用的 WEB 服務(wù)器對應(yīng)的設(shè)置 Response Header 的方法。示例及說明如下:
Strict-Transport-Security: max-age=31536000
以上 Header 的意思是,瀏覽器緩存此 HSTS 信息一年(31536000秒)的時間。還可以設(shè)置可選項 includeSubDomains 指令,用來將 HSTS 配置應(yīng)用到所有子域名。例如:
Strict-Transport-Security: max-age=31536000; includeSubDomains
HSTS 的不足
- 用戶首次訪問某網(wǎng)站是不受 HSTS 策略保護(hù)的,因為首次訪問時,瀏覽器還未收到 HSTS 配置。
- 由于 HSTS 會在一定時間后失效(通過 max-age 指定的有效期),所以瀏覽器是否使用 HSTS 策略取決于當(dāng)前系統(tǒng)時間。攻擊者可以通過一些方式修改操作系統(tǒng)的時間,從而使 HSTS 策略失效。
小結(jié)
HSTS 是一種很有用的網(wǎng)絡(luò)安全機(jī)制,可以用于提高網(wǎng)站的安全性和可靠性,有效防范中間人攻擊和 Cross-Site Request Forgery 等攻擊,建議所有網(wǎng)站都啟用 HSTS 功能。同時,也需要定期檢查和更新網(wǎng)站的安全設(shè)置,以確保安全性和可靠性。