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://www.mzph.cn/news/312352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql支持的平台和操作系统_MySQL 数据库所支持的操作系统_MySQL

MySQL数据库所支持的操作系统:我们使用GNU Autoconf,因此将MySQL移植到所有使用Posix线程和C编译器的现代系统是可能的。(要求服务器支持线程。如果只是编译客户端代码,则只需要C编译器)。我们主要在Linux(SuSE和Red Hat)、FreeBSD和Sun Sola…

C++深拷贝与浅拷贝

浅拷贝&#xff1a; 简单的赋值拷贝操作。 深拷贝&#xff1a; 在堆区重新申请空间&#xff0c;进行拷贝操作。 首先我们先写这样的一段代码&#xff1a; #include <iostream> using namespace std; //深拷贝与浅拷贝class Person {public:Person() {cout << &qu…

BeetleX轻松搭建HTTP和Weboskcet网关

在新版本的BeetleX.Bumblebee中实现了对Weboskcet代理的支持&#xff0c;因此使用BeetleX搭建同时支持HTTP和Weboskcet的网关只需要几行代码的工作就能完成&#xff1b;接下来构建一个简单的网关程序并测试一下对asp.net core SignalR进行代理的应用。引用组件使用BeetleX构建网…

[功能发布]Excel与PowerBI互通互联升级版连接SSAS和AzureAS

Excel催化剂发自内心地热爱着PowerBI社区&#xff0c;从最开始提供了PowerBIDeskTop的互通互联功能&#xff0c;到无偿奉献所有此功能的核心原代码&#xff0c;再到今天的高潮&#xff0c;献上最具商业价值的高级功能&#xff0c;让企业级商业智能BI项目插上翅膀&#xff0c;最…

window oracle 只有bak文件怎么恢复_一起来学习Oracle的备份恢复基础吧-4

基于backup controlfile的恢复使用备份的控制文件在实际工作中的两种情况&#xff1a;当前控制文件全部损坏&#xff0c;而数据文件备份、控制文件备份及当前的日志处在不同的SCN版本&#xff0c;它们之间又增加过表空间(数据文件)。当前控制文件没有损坏&#xff0c;但是想恢复…

微服务、容器和Kubernetes的2020你怎么看?

历史上&#xff0c;有些年份比其他年份容易预测。因为市场出现的稳定性使追踪趋势线变得更加容易。2020年将是企业向微服务迁移的关键一年&#xff1a;稳定并逐步地向主流应用过渡。毫无疑问&#xff0c;IT组织正在转向微服务架构。微服务将应用程序分解为许多小部分&#xff0…

C++类对象作为类成员

C类中的成员可以是另一个类的对象&#xff0c;我们称该成员为对象成员 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring>//类对象作为类成员 class Phone {public:Phone(string PName) {cout << "Phone函数的调用&…

.NET 大数据实时计算--学习笔记

摘要纯 .Net 自研大数据实时计算平台&#xff0c;在中通快递服务数百亿包裹&#xff0c;处理数据万亿计&#xff01;将分享大数据如何落地以及设计思路&#xff0c;技术重难点。目录背景介绍计算平台架构项目实战背景介绍计算平台架构分片实时计算计算平台数据统计模型开源项目…

asp.net core 实现支持多语言

asp.net core 实现支持多语言Intro最近有一个外国友人通过邮件联系我&#xff0c;想用我的活动室预约&#xff0c;但是还没支持多语言&#xff0c;基本上都是写死的中文&#xff0c;所以最近想支持一下更多语言&#xff0c;于是有了多语言方面的一些实践国际化/本地化介绍国际化…

C++this指针的用途

this指针的用途&#xff1a; 1.当形参和成员变量同名时&#xff0c;可用this指针来区分。 2.在类的非静态成员函数中返回对象本身&#xff0c;可使用return *this 每一个非静态成员函数只会诞生一份函数实例&#xff0c;也就是说多个同类型的对象会共用一块代码&#xff0c;那…

【实战 Ids4】小技巧篇:自定义登录页操作

今天的内容很简单&#xff0c;1分钟就能看完&#xff0c;5分钟就能学会&#xff0c;但是却是在我们平时开发中必须要学会的一个小知识点&#xff0c;我就不让大家走弯路了&#xff0c;直接看操作。在平时的IdentityServer4开发中呢&#xff0c;我们都是根据官方的Demo来操作一遍…

Asp.Net Core下的开源任务调度平台ScheduleMaster

从何说起2017年初的时候&#xff0c;由于当时项目需要做了一个乞丐版定时调度系统&#xff0c;那时候只在单机上实现了核心的调度功能。做这个玩意之前也调研了社区中开源的解决方案&#xff0c;找了几个实地部署试跑了一下&#xff0c;其实都很不错。但那时候我们有个问题就是…

C#录制视频

这是一个使用C#语言制作的录制框架&#xff0c;支持录制桌面&#xff0c;多屏&#xff0c;声音&#xff0c;摄像头&#xff0c;某个应用程序的界面1.安装使用此框架需要安装扩展包Kogel.Record,可以Nuget上搜索或者使用Nuget命令Install-Package Kogel.Record安装完成包后会出现…

python编程小案例_用Python3编程写第一个小案例!-Go语言中文社区

用Python3编程第一步&#xff01;今天博主跟大家聊一聊如何使用Python3编程第一步&#xff01;&#xff01;不喜勿喷&#xff0c;如有建议欢迎补充、讨论&#xff01;Come on&#xff01;在前面的几篇文章中我们已经学习了一些Python3 的基本语法知识&#xff0c;我们尝试来写一…

UnitTest in .NET(Part 5)

Photo &#xff1a;UnitTesting文 | Edison Zhou上一篇我们学习了单元测试的核心技术&#xff1a;存根、模拟对象和隔离框架&#xff0c;它们是我们进行高质量单元测试的技术基础。本篇会集中在管理和组织单元测试的技术&#xff0c;以及如何确保在真实项目中进行高质量的单元测…

java 大小写_java中如何进行大小写字母转换?

展开全部1.创建工程&#xff0c;或使用已有工程&#xff0c;在工程下创建包&#xff0c;包内新建一个类&#xff0c;我e69da5e887aa3231313335323631343130323136353331333365653262命名为Cases类&#xff0c;大家根据自己喜好随便命名&#xff0c;但请保持类名与文件名一致。2…

大量SQL的解决方案——sdmap

大量SQL的解决方案——sdmap最近看到群里面经常讨论大型应用中 SQL的管理办法&#xff0c;有人说用 EF/ EFCore&#xff0c;但很多人不信任它生成 SQL的语句&#xff1b;有人说用 Dapper&#xff0c;但将 SQL写到代码中有些人觉得不合适&#xff1b;有人提出用存储过程&#xf…

java 最小堆_堆排序 最大堆 最小堆 Java 实现

堆一点疑惑&#xff0c;堆排序是就地排序&#xff0c;所以空间复杂度是 O(1)。但是&#xff0c;比如我有一个数组&#xff0c;建立一个最小堆&#xff0c;然后每次取出最小堆的顶点。建立最小堆需要额外空间&#xff1f;不深究了&#xff0c;归并排序需要额外空间。堆是完全二叉…

提高文档翻译效率神器:VS Code 插件之 Translator Helper

微软 Docs 网站上线之后&#xff0c;我发现很多中文内容是由机器翻译的&#xff0c;可读性比较差。2017 年开始我参与了中文文档的本地化工作&#xff0c;对机器翻译的文本进行校对。Docs 的内容全部托管在 GitHub 上&#xff0c;参与者可以 fork 仓库后进行修改&#xff0c;然…

java 导入导出 插件_Java最优的Excel导入/导出工具开发,你用过吗?

关注程序员7歌&#xff0c;一起用技术改变世界在我们实际开发中经常会遇到Excel的导入与导出功能&#xff0c;而目前Excel操作工具也是数不甚数啊&#xff0c;但是7歌用过很多&#xff0c;还是觉得最近发现的tool-excel好用&#xff0c;让你实现一语句代码就能完成Excel功能。首…