上个月客户官网做完渗透测试,报告里列了 8 项"中危"风险,一大半是安全响应头缺失:没有 HSTS、CSP 没配、页面能被 iframe 嵌套。客户拿着报告问"这些要多久能改完"。我们花了两天把安全头全部配齐,复测通过。这篇把配置细节记录下来。
HSTS 告诉浏览器"这个域名只能用 HTTPS 访问",杜绝降级攻击:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload参数说明:
参数 | 值 | 说明 |
|---|---|---|
max-age | 31536000 | 生效时长(秒),一年后建议设为 63072000 |
includeSubDomains | - | 子域名一并强制 HTTPS |
preload | - | 加入浏览器 HSTS 预加载列表 |
踩坑点:**max-age 别一上来就设很大**,先设 300(5分钟)观察线上有没有 http 资源被劫持,稳定后再逐步加大,否则误伤后很难回退。
CSP 控制页面能加载哪些来源的资源,是防 XSS 的关键:
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; img-src 'self' data:; style-src 'self' 'unsafe-inline'; object-src 'none'; frame-ancestors 'none'最容易踩的坑:**script-src 漏了第三方统计脚本域名**,配置上线后统计代码全被拦;**'unsafe-inline' 能不加就不加**,加了等于允许内联脚本执行。
响应头 | 示例值 | 作用 |
|---|---|---|
X-Frame-Options | DENY | 禁止页面被 iframe 嵌套(防点击劫持) |
X-Content-Type-Options | nosniff | 禁止浏览器 MIME 嗅探 |
Referrer-Policy | strict-origin-when-cross-origin | 控制 Referrer 泄露范围 |
add\_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add\_header X-Frame-Options "DENY" always;
add\_header X-Content-Type-Options "nosniff" always;
add\_header Referrer-Policy "strict-origin-when-cross-origin" always;
add\_header Content-Security-Policy "default-src 'self'" always;关键点:always 参数让安全头在错误页面(4xx/5xx)也返回,否则错误页会漏配。
always 参数,404 页面不带安全头,渗透报告依然报风险这次官网的 HTTPS 是在乔拓云的建站产品里开启的,安全响应头在后台有配置项,我主要补充了 CDN 透传和 HSTS 分阶段升级这两块,复测时 8 项中危全部清零。
以上是个人实践记录,各平台具体功能以官方实时信息为准。
开放问题:你们做安全头配置时,还踩过哪些和 CDN 或代理相关的坑?
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。