Shopware 6 HSTS含子域致链接失效:解决方法与安全性问询
Shopware 6 HSTS 子域冲突问题解答
场景背景
我们在主域运行Shopware 6商店,子域newsletter.example.com通过CNAME指向Cleverreach,但该子域未启用HTTPS。由于Shopware默认发送包含includeSubDomains的HSTS头,导致这个子域链接无法正常工作。Shopware相关代码如下:
$response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
目前已通过Apache mod_header配置临时修改HSTS头:
Header edit Strict-Transport-Security "max-age=31536000; includeSubDomains" "max-age=31536000"
1. 移除includeSubDomains是否为最佳解决方式?
不是最佳方案。既然你们已经计划给newsletter.example.com启用HTTPS,这才是符合HSTS设计初衷的根本解决办法。移除includeSubDomains只是临时规避问题的手段,并非长期最优解。
2. 移除includeSubDomains对商店安全性的影响
- 主域本身的HSTS保护依然生效:浏览器会强制主域使用HTTPS,防止HTTP降级攻击。
- 子域失去强制HTTPS保护:如果后续新增其他子域(比如
admin.example.com、api.example.com),浏览器不会自动强制这些子域走HTTPS,存在被HTTP劫持、降级攻击的风险。
3. Shopware为何默认设置includeSubDomains?
Shopware的设计逻辑是默认假设商家的所有子域都属于同一业务体系,且都会启用HTTPS——比如后台管理、API、CDN子域等。添加includeSubDomains可以一次性为所有子域开启HSTS强制保护,简化配置,避免商家遗漏子域的安全设置,整体提升全站的安全性。
4. 现有Apache临时方案的安全隐患
- 全局移除子域保护:和直接修改Shopware代码的效果一致,所有子域都失去了HSTS强制保护,新增子域时容易出现安全漏洞。
- 规则兼容性风险:如果Shopware后续调整HSTS头的格式(比如添加
preload参数),Apache的Header edit规则可能失效,导致HSTS配置不符合预期。 - 缓存残留问题:用户浏览器之前已经缓存了带
includeSubDomains的HSTS规则,需要等待max-age过期(一年)才会生效新规则,期间部分用户仍会遇到子域无法访问的问题。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

