日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

HTTP Strict Transport Security (HSTS) in ASP.NET Core

發布時間:2023/12/4 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP Strict Transport Security (HSTS) in ASP.NET Core 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文是《2020年了,再不會HTTPS就老了》的后篇,本文著重聊一聊HTTP Strict Transport Security協議的概念和應用。

啟用 HTTPS 還不夠安全

????現在很多站點通過HTTPS對外提供服務,用戶在訪問某站點,往往會直接輸入站點域名(baidu.com),而不是完整的HTTPS地址(https://www.baidu.com),站點一般會發送301重定向,要求瀏覽器升級到HTTPS連接。

將所有非安全請求重定向到安全URL是常規做法,但是中間人仍然可以在重定向發生前劫持連接。

  HSTS指示瀏覽器只能使用HTTPS訪問域名,來處理潛在的中間人劫持風險。即使用戶輸入或使用普通的HTTP連接,瀏覽器也嚴格將連接升級到HTTPS。

HSTS

HSTS是一種可選的安全增強策略,已經由IETF RFC6797中指定。

服務端通過Strict-Transport-Security響應頭來通知客戶端應用HSTS協議:

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

若瀏覽器認可該響應頭:

  • 瀏覽器為該域名存儲(阻止請求使用HTTP連接)這一約定,瀏覽器將強制所有請求通過 HTTPS

  • 瀏覽器阻止用戶使用不安全/無效證書,會顯示禁用提示(允許用戶臨時信任該證書)

因為HSTS策略由客戶端強制執行,有一些前置條件:

  • 客戶端必須支持 HSTS 協議

  • 必須要有一次成功的HTTPS請求,這樣才能建立HSTS 策略

Preload HSTS

細心的你可能發現,HSTS還是存在一個薄弱漏洞,那就是瀏覽器沒有當前HSTS信息,或者第一次訪問;或者新操作系統,瀏覽器重裝,清除瀏覽器緩存;HSTS信息的max-age過期;

依然需要一次明文HTTP請求和重定向才能升級到HTTPS并刷新HSTS信息,

這一次依然給攻擊者可乘之機,針對以上攻擊,HSTS的應對辦法是在瀏覽器內置一個域名列表,這個列表內域名,瀏覽器都會使用HTTPS發起連接,這個列表由Chrome維護,主流瀏覽器均在使用。

一旦瀏覽器認可這個響應頭,知曉訪問這個域名的所有請求必須使用HTTPS連接,將會在1年時間內緩存這個約定。

inclueSubDomains 是可選參數,告知瀏覽器將HSTS策略用到當前域的子域。

Nginx啟用HSTS

在Nginx中設置 HSTS 相對簡單:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # always 參數確保所有的響應都有 STS Header, 舊版本(低于1.7.5)不支持always參數。

nginx add_header 的繼承規則:

如果某個配置塊包含一個add_header 指令,那么將不會繼承上層的headers, 因此你需要在內部配置塊重申 add_header 指令。

server {listen?443?ssl;add_header?Strict-Transport-Security?"max-age=31536000;?includeSubDomains"?always;# This 'location' block inherits the STS headerlocation / {root /usr/share/nginx/html;}# Because this 'location' block contains another 'add_header' directive,# we must redeclare the STS headerlocation /servlet {add_header X-Served-By "My Servlet Handler";add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;proxy_pass http://localhost:8080;} }

ASP.NETCore的福利時間

若使用Kestrel作為邊緣(face-to-internet) web服務器,相關配置可參考AddHsts()的lambda參數:

  • 為STS header設置preload參數,Preload不是RFC HSTS規范的一部分,但是瀏覽器支持在全新安裝時預加載HSTS網站

  • 指定子域使用HSTS協議,?或排除某些子域使用HSTS

  • 設置瀏覽器緩存 [訪問站點的請求均使用HTTPS協議] 這一約定的時間,默認是30天。

public void ConfigureServices(IServiceCollection services) {services.AddMvc();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");});services.AddHttpsRedirection(options =>{options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;options.HttpsPort = 5001;}); }

請注意:UseHsts對于本地回送hosts并不生效

  • localhost:? ? ?IPv4回送地址

  • 127.0.0.1? ? ???IPv4回送地址

  • [::1]????????????????IPv6回送地址

這也是開發者在localhost:5001啟動時抓不到Strict-Transport-Security 響應頭的原因。

下面給出啟用了HSTS的生產示例:

+ nginx啟用HSTS:??https://www.nginx.com/blog/http-strict-transport-security-hsts-and-nginx/

+ chrome清除HSTS信息:?https://www.ssl2buy.com/wiki/how-to-clear-hsts-settings-on-chrome-firefox-and-ie-browsers

往期精彩回顧

2020年了,再不會Https就老了

ASP.NETCore編程實現基本認證

AspNetCore結合Redis實踐消息隊列

轉載是一種動力,分享是一種美德? ? ~~..~~

如果你覺得文章還不賴,您的鼓勵是原創干貨作者的最大動力,讓我們一起激濁揚清。

掃碼

關注

總結

以上是生活随笔為你收集整理的HTTP Strict Transport Security (HSTS) in ASP.NET Core的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。