Missing HSTS Header 對網站資安的影響及解決方法

Turned-on Computer Monitor Displaying Text

Missing HSTS Header 意指網站未設定 HTTP Strict Transport Security(HSTS) 標頭,該標頭告訴瀏覽器該網站僅支援 HTTPS 連線,並防止中間人攻擊和 SSLstrip 攻擊等。

如果網站缺少 HSTS 標頭,攻擊者可能會使用中間人攻擊來偷取使用者的資訊。在此攻擊中,攻擊者可能會假扮成該網站,讓使用者誤以為正在與該網站建立加密連線,而實際上卻是與攻擊者建立連線,讓攻擊者能夠監視或修改使用者的資料。

因此,為了保護使用者的安全,網站應該設定 HSTS 標頭,以確保網站僅使用 HTTPS 連線,防止中間人攻擊和 SSLstrip 攻擊等安全威脅。

HTTP Strict Transport Security(HSTS)是一種安全機制,旨在保護使用者的網路連線免於中間人攻擊和 SSLstrip 攻擊等安全威脅。它的主要功用如下:

  1. 強制使用 HTTPS 連線:HSTS 標頭告訴瀏覽器該網站僅支援 HTTPS 連線,防止攻擊者使用 HTTP 協定或其他不安全的協定攔截使用者的資料。

  2. 防止 SSLstrip 攻擊:SSLstrip攻擊是一種中間人攻擊(MITM),主要目的是破壞網站和用戶之間的安全連接。簡單來說,這是攻擊者在用戶和網站之間插手,竄改通信內容的一種方式。

    在正常情況下,當您訪問一個使用HTTPS加密的網站時,您的瀏覽器和該網站之間會建立一個安全連接,以保護您的數據和隱私。然而,SSLstrip攻擊會在用戶和網站之間加入一個攻擊者,他們將試圖將安全的HTTPS連接降級為不安全的HTTP連接。這樣,攻擊者就可以輕鬆地監控和竄改您與網站之間的通信,竊取敏感信息,如用戶名、密碼和信用卡信息。

  3. 防止中間人攻擊:中間人攻擊是一種攻擊方式,攻擊者會監控網路連線,並將其篡改或偽造成攻擊者控制的連線。HSTS 標頭可以防止中間人攻擊,因為瀏覽器會驗證網站的憑證,確保該網站的證書是有效且由可信的憑證機構簽發。

當網站缺少 HSTS 標頭時,攻擊者可能會使用中間人攻擊(Man-in-the-Middle, MITM)來進行以下攻擊:

  1. SSLstrip 攻擊:攻擊者可以攔截使用者的 HTTP 請求,將其轉換為 HTTP 請求,從而繞過網站的 HTTPS 保護。這樣做可能會讓使用者的資料暴露在攻擊者的監控下,使攻擊者能夠窺探使用者的敏感資訊,如登入名稱和密碼等。

  2. 透過自簽憑證的攻擊:攻擊者可以發送自簽憑證,並假裝成該網站的正式憑證,以欺騙使用者認為他們正在與網站建立安全連線。此時,使用者可能會將其敏感資訊發送給攻擊者,而攻擊者可以使用這些資訊來進一步攻擊使用者或盜取其資料。

因此,如果網站缺少 HSTS 標頭,攻擊者可能會使用這些攻擊方式對使用者進行攻擊。為了保護使用者的安全,網站應該設定 HSTS 標頭,以確保網站僅使用 HTTPS 連線,防止中間人攻擊和 SSLstrip 攻擊等安全威脅。

若你想在 C# 中修補 Missing HSTS Header 的問題,你可以在應用程式啟動時加入以下程式碼:

using System.Net;

// 設定 HSTS 標頭
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; // 確認使用 TLS 1.2 以上版本的安全協定
ServicePointManager.Expect100Continue = true; // 啟用 100-Continue 行為,以提升效能
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; // 忽略憑證檢查

var uri = new Uri("https://example.com");
var webRequest = WebRequest.Create(uri);
webRequest.GetResponse();

以上程式碼設定了 HSTS 標頭並建立一個 WebRequest,該 WebRequest 會發出一個 HTTPS 請求,並觸發 HSTS 標頭設定。

注意,這個解決方案會忽略憑證檢查,這樣做可能會導致安全問題。如果你需要建立一個安全的應用程式,建議你應該使用有效的憑證並遵守最佳安全實踐。

最後提一下,大部分實務上遇到的攻擊情境比較會是強制降轉成HTTP也就是SSLstrip攻擊,所以另一種做法是確保伺服器不要對外暴露80 port. 如此一來就可以大幅度緩解此問題,因為就只有443可以連線,就不需要擔心被降成HTTP的問題了, 不一定要修改程式碼。

此外,以下是一些關於 Missing HSTS Header 的參考連結提供給大家參考:

  1. Mozilla Developer Network (MDN) – HSTS文件: https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Headers/Strict-Transport-Security :這個連結提供了HSTS的基本介紹和詳細說明,包括如何實現和配置HSTS,以及使用HSTS的最佳做法。

  2. OWASP – HTTP Strict Transport Security Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Strict_Transport_Security_Cheat_Sheet.html :此連結來自於OWASP(開放Web應用安全項目),提供了一個HSTS的懶人包,闡述了如何正確地實現和配置HSTS,以確保您的網站能夠遵循安全最佳實踐。

  3. IETF RFC 6797 – HTTP Strict Transport Security (HSTS): https://tools.ietf.org/html/rfc6797 :這個連結指向HSTS的官方技術規範(RFC 6797),提供了HSTS技術的詳細說明和實現細節。這份文件是理解和實現HSTS的權威資源。

這些連結提供了關於 HSTS 的詳細介紹、實現方式、漏洞及其修復方式等相關信息。如果網站缺少 HSTS 標頭,則可以參考這些連結,了解相應的問題和解決方法。

發佈留言