浅析HSTS
浅析HSTS
一、HSTS是什么?
HSTS全称:HTTP Strict Transport Security,意译:HTTP严格传输安全,是一个Web安全策略机制。
二、HSTS解决什么问题?
它解决的是:网站从Http转跳到Https时,可能出现的安全问题。
一般从Http跳转Https的流程:

Client从Http切换到Https前是明文传输,因此是可以被Man-In-The-Middle劫持的,如下流程:

三、HSTS如何解决?
要解决从Http切换到Https被劫持的问题,只要一开始就没有Http请求即可,流程如下:

四、HSTS如何知道,哪些请求该转为Https,哪些不该转?
方案1. 最近一次请求的Https响应中(Response)中,带上HSTS Header:
Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload]
- max-age:
- 必选,单位:秒。
- 意义:HSTS header过期时间,一般设置为1年,即31536000秒。而每次Response Header都带上HSTS Header,则可不断刷新其过期时间。
- includeSubDomains:
- 可选。
- 意义:需要开启HSTS的域名/子域名。
- preload:
- 可选
- 意义:当加入了浏览器内置Preload List时才需要设置该项。
方案2. HSTS Preload List
方案1还是有个漏洞:
- 如果第一次访问网站A就被劫持了,哪方案1岂不白搭?
- 清Cookies或者HSTS Header过期了,下次访问岂不又风险重重?
基于以上问题,就需要方案2(HSTS Preload List):
官方说明:
This is a list of sites that are hardcoded into Chrome as being HTTPS only.
HSTS Preload List是一个站点列表,它被hardcode写入Chrome中,列表中的站点将会默认使用 HTTPS 进行访问。
Most major browsers (Chrome, Firefox, Opera, Safari, IE 11 and Edge) also have HSTS preload lists based on the Chrome list. (See the HSTS compatibility matrix.)
主流浏览器(Firefox, Opera, Safari, IE 11 and Edge)都有和Chrome一样的HSTS Preload List。
这样,就直接从源头上封死Http转跳Https时被劫持的可能性。
五、其他相关:
- Chrome的HSTS Preload List哪里可以看到?
- 如何加入HSTS Preload List?
- 加入HSTS Preload List的副作用?
- 因为浏览器会强制跳转Https,所以以后将无法使用Http再访问网站,如果不能保证持续提供Https服务,最好还是别折腾了。
浅析HSTS的更多相关文章
- NGINX: 配置 HSTS
参考: [ 浅析 HSTS - 博客园 ] [ HTTP HSTS协议和 nginx - 运维生存时间] [ HSTS ] Header: Strict-Transport-Security Stri ...
- SQL Server on Linux 理由浅析
SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...
- 【流量劫持】躲避 HSTS 的 HTTPS 劫持
前言 HSTS 的出现,对 HTTPS 劫持带来莫大的挑战. 不过,HSTS 也不是万能的,它只能解决 SSLStrip 这类劫持方式.但仔细想想,SSLStrip 这种算劫持吗? 劫持 vs 钓鱼 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- netty5 HTTP协议栈浅析与实践
一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...
- Jvm 内存浅析 及 GC个人学习总结
从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...
- 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
随机推荐
- ogma
Ogma是Linkurious的JavaScript图形可视化库.Ogma的一个实例是一个javascript对象,它在内部存储一个图形, 并根据样式规则在HTML容器中呈现它. Ogma有两个版本: ...
- 2018开源中国最受欢迎的中国软件MyBatis-Plus
2018开源中国最受欢迎的中国软件MyBatis-Plus 官方网址:https://mp.baomidou.com 中国软件,中文文档 什么是MyBatis-Plus? 进入官方第一句话:为简化开发 ...
- SQL语句完整的执行顺序(01)
一.sql语句的执行步骤: 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3)视图转换,将涉 ...
- vue.js遍历ajax请求的数据
<div id="dv" style="text-align: center;"><div class="head input-gr ...
- ansible字符串的处理
ansible中字符串的处理 from_json json_query join select selectattr map list trim 列表和字典的处理 combine
- PHP左侧菜单栏的管理与实现
以thinkPHP5.0为例 后台config.php文件里配置 //配置文件设置菜单内容属性 'menu' => [ [ 'name' => '菜单栏1', 'url' => '/ ...
- maven中运行java程序
从命令行运行1.运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成编译.mvn compile2.编译完成后,执行exec运行main方法. 不需要传递参 ...
- python第六天(元组、字典、集合)
一.元组(tuple) 作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要用来读 定义:与列表类型相比,只不过把[ ]换成() age=(11,22,33,44,55)prin ...
- python 配置文件__ConfigParser
基础读取配置文件 -read(filename) 直接读取文件内容 -sections() 得到所有的section,并以列表的形 ...
- TensorFlow之多核GPU的并行运算
tensorflow多GPU并行计算 TensorFlow可以利用GPU加速深度学习模型的训练过程,在这里介绍一下利用多个GPU或者机器时,TensorFlow是如何进行多GPU并行计算的. 首先,T ...