我們的選擇

我們可以看到,這次攻擊中最關鍵的一步是受害者一開始進行的初始握手。因此,為了防止這種攻擊發生,我們需要確保用戶的瀏覽器只使用加密與我們的服務器通信。而最有效的方法就是明確指示瀏覽器這樣做。 

這個流程本質上就是 HTTP 嚴格傳輸安全所代表的,它是網絡安全的基石之一。

基礎知識

現在所有的理論都已經講完了,讓我們來探索如何保護我們的網站安全。

好消息是,在大多數情況下,我們瀏覽器的內置安全功能可以幫到我們。要使用 HSTS 實現主要安全層,我們需要做的就是將以下標頭添加到服務器響應中。

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

HSTS 標頭包含三個指令,一個是強制的,兩個是可選的。同樣,如果您讀過我們之前關于 HSTS 的帖子,您應該對這些指令很熟悉。

保護您的 ASP.NET Core 項目

您可以通過兩種方式將 HSTS 標頭添加到 ASP.NET 核心項目:

要使用UseHttpsRedirection方法,請使用以下內容修改Program.cs文件:

app.UseHttpsRedirection();

此外,我們需要為中間件設置一個端口,以將不安全的請求重定向到 HTTPS。 

如果沒有可用的端口,頁面將不會重定向到 HTTPS,并且中間件會記錄警告“無法確定重定向的 https 端口”。

通過向appsettings.json文件添加以下指令,您可以輕松做到這一點。

{
"https_port": 443,
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

對于第二條路由,您可以在Program.cs文件中使用以下代碼添加 HSTS 中間件。

if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});

當然,僅僅因為您知道如何將 HSTS 標頭應用于頁面并不意味著您的網站可以強制執行該政策。例如,如果您的網站與 HSTS 不兼容,您將收到以下消息:

.NET HTTP 嚴格傳輸安全指南:它是什么以及如何啟用它圖像

我們可以看到,一個錯誤導致瀏覽器無法顯示該頁面。 

盡管我們嘗試訪問的服務器表明通信是加密的,但我們的瀏覽器收到了一些可疑信息并切斷了連接。

了解 HSTS 錯誤

一旦我們看到瀏覽器提供的錯誤信息,我們就可以了解問題的可能根源。 

我們的首要任務是確保正確設置加密。此外,如果我們是第一次部署 HSTS,我們必須有一個適當的實施計劃。

根據Scott Helme的 HSTS 教程中的一些內容,下面是需要遵循的步驟清單。

  1. 查找屬于您網站的所有子域名(查閱 DNS CNAME 條目)。請注意,它們可能屬于第三方服務。
  2. 確認根域及其子域可通過 HTTPS 訪問。
  3. 確保您配置了正確的 HTTP 到 HTTPS 重定向。
  4. 設置較短的過期時間。例如,max-age=300(5分鐘)。
  5. 如果必要的話,附加includeSubDomains指令。
  6. 分階段增加max-age。爭取有效期為兩年。
  7. 一旦一切順利,添加預加載指令。
  8. 將您的域名提交到 Google 的 HSTS 預加載列表,這將確保所有主流瀏覽器的未來版本都會預加載您的域名并將其標記為僅安全。(可選)

完成所有這些步驟后,您將擁有一個僅強制使用 HTTPS 通信的站點。從那時起,所有用戶都將遵守該政策。

關于 HSTS 的最終思考

在我們尋求為我們的應用程序實現可靠的安全層的過程中,必須做很多工作來提供必要的保證,以與我們的用戶建立強大的信任度。 

當今的網絡已經將安全性和標準推向了極致,使得一些解決方案變得復雜且具有挑戰性。

值得慶幸的是,實施 SSL/TLS 和 HSTS 策略非常簡單,并且在很大程度上保護了大部分網絡。

文章來源:.NET HTTP Strict Transport Security Guide: What It Is and How to Enable It

上一篇:

Node.js 破譯身份驗證指南:示例與預防

下一篇:

Lua命令注入:示例與預防
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費