中間人攻擊 (MITM)
在中間人(MITM)攻擊中,攻擊者會插入到兩個正在嘗試通訊的實體之間。
在 Web 上,MITM 攻擊通常發生在使用者瀏覽器和伺服器之間,並允許攻擊者檢視並可能修改透過 HTTP 交換的任何流量。
攻擊者執行 MITM 攻擊的一種常見方式是在公共場所(如咖啡館或機場)設定一個無線接入點,然後等待受害者連線到它。如果受害者連線了,攻擊者就能讀取和修改使用者瀏覽器與他們連線的任何網站之間交換的任何資料。
防範 MITM 的措施
防範 MITM 的主要方法是透過 HTTPS(基於 TLS 的 HTTP)來提供您的網站。HTTPS 可阻止攻擊者讀取流量,或以可預測的方式修改流量。
您應該透過 HTTPS 提供所有頁面,而不僅僅是您認為特別敏感的頁面。
使用安全的 TLS 配置
要支援 HTTPS,網站需要一個 TLS 證書。Let's Encrypt 是一個廣泛使用的非營利性證書頒發機構,它頒發免費的 TLS 證書。
並非所有 TLS 配置都同樣安全:如果您需要配置自己的伺服器,請查閱 Mozilla 的 TLS 推薦配置等資源。
現代 Web 託管服務預設或透過配置設定為您支援 HTTPS。在這種情況下,託管服務可能會代表您管理您的證書並配置伺服器。
透過 HTTPS 載入子資源
當頁面載入資源(指令碼、樣式表、字型、圖片等)時,這些資源也應該透過 HTTPS 提供。如果頁面透過 HTTPS 載入,但嘗試透過 HTTP 載入資源,則瀏覽器將嘗試升級載入請求以使用 HTTPS,或者會阻止該請求:這被稱為 混合內容阻止。
如果您無法更新程式碼以從 HTTPS URL 載入資源(例如,因為您的 HTML 已存檔),您的伺服器可以設定一個 內容安全策略,其中包含 upgrade-insecure-requests 指令,瀏覽器將自動將這些請求升級到 HTTPS。
在升級 HTTP 請求時使用 HSTS
即使您的網站僅透過 HTTPS 提供,使用者仍可能透過 HTTP 請求它:例如,在位址列中輸入 http://example.org。為了使您的網站在這種情況下正常工作,您可以監聽 HTTP 請求並使用 301 Moved Permanently 響應將請求重定向到 HTTPS 版本。
但是,這為攻擊者提供了攔截初始交換的機會,然後阻止 HTTPS 升級發生。這有時被稱為SSL 剝離攻擊(SSL 是 TLS 的前身)。
為了降低此攻擊的風險,您的伺服器還應傳送 Strict-Transport-Security HTTP 響應頭(也稱為 HSTS):這會告知客戶端您希望它們使用 HTTPS,並且在任何後續訪問中,即使是透過 HTTP URL 訪問,瀏覽器也會直接使用 HTTPS 進行連線。
使用 HSTS 後,SSL 剝離僅在瀏覽器首次嘗試連線到您的網站時(或者,由於 HSTS 有有效期,在瀏覽器中的 HSTS 記錄過期後的首次嘗試時)才會發生。為了保護您的網站,即使是在首次連線或 HSTS 記錄過期時,Chrome 也會維護一個稱為 HSTS 預載入列表的域名列表:如果一個域名在此列表中,Chrome 將始終將 HTTP 請求升級到 HTTPS,效果如同伺服器已傳送 HSTS 頭一樣。Safari 和 Firefox 也有類似的行為,使用源自 Chrome 列表的列表。
防禦總結清單
- 透過 HTTPS 提供您網站的所有頁面和子資源。
- 如果您想將 HTTP 請求重定向到 HTTPS,請使用 HSTS,並考慮將您的網站新增到 HSTS 預載入列表。