
2024年七大最佳免费货币转换API
在过去的几十年里,为我们的平台实施复杂的规则和缓解政策已经成为必要。
如今的网络已经发生了巨大的变化。当然,我们不敢说网络 100% 安全,可以抵御每天出现的威胁。
尽管如此,安全社区仍在努力使网络上的安全措施更加强大,并有效地抵御这些威胁。然而,并非所有安全措施都是一样的。例如,保护我们用户的基本功能之一是 HTTP 严格传输安全 (HSTS)。
本文的目标是探索 HSTS 的概念。
我们将简要定义什么是 HSTS 以及它如何成为服务器和客户端之间安全通信的基础,探讨如何实现此安全功能,并回顾可能出现的一些复杂情况。
最后,您应该了解什么是 HSTS 以及如何将其合并到您的项目中。
注意:本文面向 .NET 开发人员,因此我们将探讨如何在 ASP.NET Core 开发堆栈上实现 HSTS 解决方案。这意味着,要充分利用本文,您需要具有使用 C# 和 ASP.NET 的经验。
如果您对 HSTS 的总体概念感兴趣,我们建议您查看我们关于您喜欢的技术堆栈的其他文章。
解决了这个问题之后,我们就开始吧。
以下解释将是技术性的,并且在所有平台上都是相对标准的,但请耐心听我说。
自诞生以来,加密一直是保护数据免遭恶意用户攻击的第一道防线。因此,作为开发人员,我们的工作是确保我们网站上的所有交易都使用正确的协议进行加密。
虽然网络使用 SSL/TLS 协议加密并保护客户端-服务器交易,但您的交易是否受到保护则完全是另一回事。
标准沟通流程如下:
网站和用户之间的沟通流程首先需要向域发出 HTTP 请求。
然后,如果相关服务器使用有效证书实现 SSL/TLS 并强制执行 HTTPS 重新路由,则用户将被重定向(301)到具有 HTTPS 请求的同一站点。
此流程确保客户端和服务器之间的所有通信均通过加密安全完成。
但事实并非如此。
我们在之前的帖子中讨论过中间人(MITM)攻击,这里再回顾一下。
一个信任的用户试图通过受损的网络(伪装成合法的假冒接入点)访问我们的服务器,从而访问我们的网站。
在这种情况下,初次握手可能会以以下方式使受害者面临漏洞。
这种攻击称为 SSL 剥离。它的工作原理是让攻击者充当通信中介。然后攻击者可以控制受害者的安全协议,基本上就是剥离客户端的所有加密安全性。
我们可以看到,这次攻击中最关键的一步是受害者一开始进行的初始握手。因此,为了防止这种攻击发生,我们需要确保用户的浏览器只使用加密与我们的服务器通信。而最有效的方法就是明确指示浏览器这样做。
这个流程本质上就是 HTTP 严格传输安全所代表的,它是网络安全的基石之一。
现在所有的理论都已经讲完了,让我们来探索如何保护我们的网站安全。
好消息是,在大多数情况下,我们浏览器的内置安全功能可以帮到我们。要使用 HSTS 实现主要安全层,我们需要做的就是将以下标头添加到服务器响应中。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
HSTS 标头包含三个指令,一个是强制的,两个是可选的。同样,如果您读过我们之前关于 HSTS 的帖子,您应该对这些指令很熟悉。
您可以通过两种方式将 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 不兼容,您将收到以下消息:
我们可以看到,一个错误导致浏览器无法显示该页面。
尽管我们尝试访问的服务器表明通信是加密的,但我们的浏览器收到了一些可疑信息并切断了连接。
一旦我们看到浏览器提供的错误信息,我们就可以了解问题的可能根源。
我们的首要任务是确保正确设置加密。此外,如果我们是第一次部署 HSTS,我们必须有一个适当的实施计划。
根据Scott Helme的 HSTS 教程中的一些内容,下面是需要遵循的步骤清单。
完成所有这些步骤后,您将拥有一个仅强制使用 HTTPS 通信的站点。从那时起,所有用户都将遵守该政策。
在我们寻求为我们的应用程序实现可靠的安全层的过程中,必须做很多工作来提供必要的保证,以与我们的用户建立强大的信任度。
当今的网络已经将安全性和标准推向了极致,使得一些解决方案变得复杂且具有挑战性。
值得庆幸的是,实施 SSL/TLS 和 HSTS 策略非常简单,并且在很大程度上保护了大部分网络。
文章来源:.NET HTTP Strict Transport Security Guide: What It Is and How to Enable It