背景与价值
HSTS可强制HTTPS并阻断降级攻击。预加载与子域覆盖能在浏览器层面进一步增强安全。
统一规范
- 时长上限:`max-age` 默认≥31536000且不超过两年。
- 子域覆盖:生产启用 `includeSubDomains`,避免子域降级链路。
- 预加载:满足条件后申请预加载并定期复核。
核心实现
策略生成与校验
type Res = { setHeader: (k: string, v: string) => void }
function ttlValid(sec: number): boolean { return Number.isInteger(sec) && sec >= 31536000 && sec <= 63072000 }
function domainEligible(host: string): boolean { return /^[a-z0-9.-]+$/.test(host) && !host.startsWith('localhost') }
function setHsts(res: Res, host: string, ttlSec = 31536000, includeSub = true, preload = false) {
if (!domainEligible(host) || !ttlValid(ttlSec)) return
let v = `max-age=${ttlSec}`
if (includeSub) v += '; includeSubDomains'
if (preload) v += '; preload'
res.setHeader('Strict-Transport-Security', v)
}
落地建议
- 在全站启用HSTS并覆盖子域,确保长效HTTPS;满足条件后申请预加载。
- 定期验证域名与时长配置,避免过短影响与过长难以撤销。
验证清单
- `max-age` 是否在范围内;是否启用 `includeSubDomains` 与 `preload`。

发表评论 取消回复