我們的選擇

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

這個(gè)流程本質(zhì)上就是 HTTP 嚴(yán)格傳輸安全所代表的,它是網(wǎng)絡(luò)安全的基石之一。

基礎(chǔ)知識(shí)

現(xiàn)在所有的理論都已經(jīng)講完了,讓我們來探索如何保護(hù)我們的網(wǎng)站安全。

好消息是,在大多數(shù)情況下,我們?yōu)g覽器的內(nèi)置安全功能可以幫到我們。要使用 HSTS 實(shí)現(xiàn)主要安全層,我們需要做的就是將以下標(biāo)頭添加到服務(wù)器響應(yīng)中。

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

HSTS 標(biāo)頭包含三個(gè)指令,一個(gè)是強(qiáng)制的,兩個(gè)是可選的。同樣,如果您讀過我們之前關(guān)于 HSTS 的帖子,您應(yīng)該對這些指令很熟悉。

保護(hù)您的 ASP.NET Core 項(xiàng)目

您可以通過兩種方式將 HSTS 標(biāo)頭添加到 ASP.NET 核心項(xiàng)目:

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

app.UseHttpsRedirection();

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

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

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

{
"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");
});

當(dāng)然,僅僅因?yàn)槟廊绾螌?HSTS 標(biāo)頭應(yīng)用于頁面并不意味著您的網(wǎng)站可以強(qiáng)制執(zhí)行該政策。例如,如果您的網(wǎng)站與 HSTS 不兼容,您將收到以下消息:

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

我們可以看到,一個(gè)錯(cuò)誤導(dǎo)致瀏覽器無法顯示該頁面。 

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

了解 HSTS 錯(cuò)誤

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

我們的首要任務(wù)是確保正確設(shè)置加密。此外,如果我們是第一次部署 HSTS,我們必須有一個(gè)適當(dāng)?shù)膶?shí)施計(jì)劃。

根據(jù)Scott Helme的 HSTS 教程中的一些內(nèi)容,下面是需要遵循的步驟清單。

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

完成所有這些步驟后,您將擁有一個(gè)僅強(qiáng)制使用 HTTPS 通信的站點(diǎn)。從那時(shí)起,所有用戶都將遵守該政策。

關(guān)于 HSTS 的最終思考

在我們尋求為我們的應(yīng)用程序?qū)崿F(xiàn)可靠的安全層的過程中,必須做很多工作來提供必要的保證,以與我們的用戶建立強(qiáng)大的信任度。 

當(dāng)今的網(wǎng)絡(luò)已經(jīng)將安全性和標(biāo)準(zhǔn)推向了極致,使得一些解決方案變得復(fù)雜且具有挑戰(zhàn)性。

值得慶幸的是,實(shí)施 SSL/TLS 和 HSTS 策略非常簡單,并且在很大程度上保護(hù)了大部分網(wǎng)絡(luò)。

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

上一篇:

Node.js 破譯身份驗(yàn)證指南:示例與預(yù)防

下一篇:

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

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場景實(shí)測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

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

10個(gè)渠道
一鍵對比試用API 限時(shí)免費(fèi)