HSTS 简介

HTTP严格传输安全协议(英语:HTTP Strict Transport Security,简称:HSTS),是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略,来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险。其征求修正意见书文件编号是RFC 6797,发布于2012年11月。

HSTS 缺点

HSTS并不是HTTP会话劫持的完美解决方案。用户首次访问某网站是不受HSTS保护的。这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问。
如果用户通过HTTP访问HSTS保护的网站时,以下几种情况存在降级劫持可能:

  • 以前从未访问过该网站
  • 最近重新安装了其操作系统
  • 最近重新安装了其浏览器
  • 切换到新的浏览器
  • 切换到一个新的设备,如:移动电话
  • 删除浏览器的缓存
  • 最近没访问过该站并且max-age过期了

解决方案

解决这个问题目前有两种方案:
方案一:在浏览器预置HSTS域名列表,就是上面提到的HSTS Preload List方案。该域名列表被分发和硬编码到主流的Web浏览器。客户端访问此列表中的域名将主动的使用HTTPS,并拒绝使用HTTP访问该站点。
方案二:将HSTS信息加入到域名系统记录中。但这需要保证DNS的安全性,也就是需要部署域名系统安全扩展。

支持 HSTS 的浏览器

目前主流浏览器都已经支持HSTS特性,具体可参考下面列表:

  • Google Chrome 4 及以上版本
  • Firefox 4 及以上版本
  • Opera 12 及以上版本
  • Safari 从 OS X Mavericks 起
  • Internet Explorer 11 及以上版本

开启 HSTS

证书可用的情况下,开启 HSTS
在 .htaccess 文件中加入

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#设置HSTS请求header
Header set Strict-Transport-Security "max-age=31531000" env=HTTPS
#判断请求端口并强制跳转SSL协议
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
</IfModule>

协议内容

HSTS 协议的作用是强制客户端(如浏览器)使用 HTTPS 与服务器建立连接。服务器开启 HSTS 的方法是,当客户端通过 HTTPS 发出请求时,在服务器返回的 HTTP 头文件中包含 Strict-Transport-Security 字段。非加密传输时设置的 HSTS 字段无效。

参考资料

https://baike.baidu.com/item/HTTP%E4%B8%A5%E6%A0%BC%E4%BC%A0%E8%BE%93%E5%AE%89%E5%85%A8%E5%8D%8F%E8%AE%AE
https://www.cnblogs.com/lsgxeva/p/11275465.html

Last modification:April 8th, 2021 at 12:43 pm
赠人玫瑰,手有余香。您的赞赏是对我最大的支持!