如何在www子域上正确应用Strict-Transport-Security头?
背景信息
我打算给网站的HTTPS响应添加带includeSubDomains和preload选项的Strict-Transport-Security头,格式如下:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
我的主机服务商设置的重定向流程是:
- http -> https -> https://www.
- https -> https://www.
所有用户最终都会访问https://www.example.com。我注意到亚马逊采用类似的重定向流程,仅在www响应中返回HSTS头,且HSTS预加载列表中仅注册了www.amazon.de而非amazon.de。
疑问
- 若在
www.example.com上添加带includeSubDomains的HSTS,是否意味着admin.example.com等其他子域无法得到保护?www子域是否存在例外规则? - 若将
www.example.com注册到HSTS预加载列表,是否example.com仍无法防范首次请求的风险? - 当已有http->https重定向且主域未预加载时,在www站点配置HSTS的意义是什么?
解答
问题1
是的,admin.example.com这类子域无法通过www.example.com的HSTS头得到保护。HSTS的includeSubDomains规则是按域名层级生效的——www.example.com的子域是xxx.www.example.com这类层级,而admin.example.com是主域example.com的直接子域,不在www.example.com的子域范围内,自然不会被覆盖。不存在针对www子域的特殊例外规则,完全遵循域名层级的匹配逻辑。
问题2
没错,example.com依然会面临首次请求的风险。HSTS预加载列表是按单个域名独立注册的,注册www.example.com只会让浏览器对这个域名强制使用HTTPS;主域example.com不在预加载列表内的话,用户第一次访问example.com时,浏览器还是会先发起HTTP请求,存在被劫持的可能。
问题3
这种配置的核心意义有两点:
- 锁定www域名的HTTPS访问:用户访问
www.example.com一次后,后续所有对该域名的请求都会被浏览器强制转为HTTPS,避免了该域名本身被降级到HTTP的风险,哪怕重定向环节出现故障也能保障安全。 - 配合重定向流程强化安全:虽然主域没预加载,但用户最终都会落到
www.example.com,一旦浏览器缓存了这个域名的HSTS规则,后续任何指向www.example.com的访问(包括从其他页面跳转、用户手动输入)都会直接走HTTPS,省去了重定向步骤,也杜绝了这一环节的劫持风险。
内容的提问来源于stack exchange,提问作者Deivydas Voroneckis

