Kar*_*mar 6 c# asp.net hsts asp.net-core asp.net-core-6.0
我需要在 ASP.Net Core 6.0 WEB API 应用程序中实现 HSTS 标头安全性。
下面是我的Program.cs
var builder = WebApplication.CreateBuilder(args);
...
// Https redirection
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = (int)HttpStatusCode.TemporaryRedirect;
options.HttpsPort = 7075;
});
// HSTS Security Headers
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(365);
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.UseCustomExceptionHandler();
app.MapControllers();
app.Run();
Run Code Online (Sandbox Code Playgroud)
下面是launchSettings.json
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:17240",
"sslPort": 0
}
},
"profiles": {
"EFCoreRelationshipsTutorial": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5075;https://localhost:7075",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该应用程序在 URL - http://localhost:5075/swagger/index.html 上启动,但是,我希望它会自动重定向到 https://localhost:7075/swagger/index.html。
另外,我期待响应中的严格传输安全标头,例如
但是,它不存在于响应标头中。
我缺少什么?如何在asp.net core 6.0中实现HSTS?
Met*_*urf 16
.AddHsts()排除localhost这就是为什么你看不到它在你的开发机器上运行的原因;以及为什么只建议在生产中使用它。
来自 asp.net 文档HTTP 严格传输安全协议 (HSTS):
在开发中不建议使用 UseHsts,因为 HSTS 设置可以被浏览器高度缓存。默认情况下,UseHsts 不包括本地环回地址。
对于首次实现 HTTPS 的生产环境,请使用 TimeSpan 方法之一将初始 HstsOptions.MaxAge 设置为较小的值。将值从几小时设置为不超过一天,以防您需要将 HTTPS 基础设施恢复为 HTTP。当您对 HTTPS 配置的可持续性充满信心后,请增加 HSTS max-age 值;常用的值为一年。
然后是一段代码:
using System.Net;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
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");
});
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = (int)HttpStatusCode.TemporaryRedirect;
options.HttpsPort = 5001;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Run Code Online (Sandbox Code Playgroud)
本文的其余部分更详细地解释了配置选项和行为。
只是做了一些实验,Strict-Transport-Security通过在我的 Windows 主机文件中创建一个条目并更新我的launchSettings.json.
编辑你的主机文件;超级用户示例。
文件:C:\Windows\System32\drivers\etc\hosts
添加一些内容:
127.0.0.1 myweb.local
Run Code Online (Sandbox Code Playgroud)
保存文件(您可能需要在管理模式下打开编辑器)。并使用您发布的设置,将主机名从本地主机修改为主机文件中定义的站点名称,即myweb.local
127.0.0.1 myweb.local
Run Code Online (Sandbox Code Playgroud)
当然,我的环境仅启用了 https,但在主机文件中创建条目并更新启动设置以使用我映射回 127.0.0.1 的主机名后,标头就出现了。
| 归档时间: |
|
| 查看次数: |
18054 次 |
| 最近记录: |