安全响应头配置:CSP HSTS 与 X-Frame-Options
该文章由AI生成,仅为SEO优化测试,相关内容不保证准确!!!
引言
很多攻击不需要漏洞,只需要浏览器“太听话”:点击劫持利用 iframe 嵌套诱骗点击;HTTP 明文传输可被中间人篡改;内联脚本让 XSS 更容易。安全响应头是告诉浏览器“该怎么自我保护”的指令,配置成本低、收益大。
一、X-Frame-Options:防点击劫持
攻击者把自己的页面套一层透明 iframe 引诱用户点击(点击实际落在你的页面上,如“转账确认”按钮)。响应头:X-Frame-Options: DENY(禁止任何 iframe 嵌套)或 SAMEORIGIN(只允许同源嵌套)。nginx 配置:add_header X-Frame-Options "SAMEORIGIN" always;。现代等价物是 CSP 的 frame-ancestors 指令,两者可同时配置兼容旧浏览器。
二、HSTS:强制 HTTPS 并防降级
问题:用户输入域名默认走 http://,攻击者可在此刻拦截。HSTS 响应头告诉浏览器“接下来 N 秒内,访问本站必须用 HTTPS,即使用户输入 http:// 也自动升级”:Strict-Transport-Security: max-age=31536000; includeSubDomains; preload。注意三点:① 确认 HTTPS 已稳定运行再加,否则 HSTS 生效期内无法回退 HTTP;② includeSubDomains 会强制所有子域名 HTTPS,若有子站不支持需谨慎;③ preload 列表提交后撤销困难,确认长期全站 HTTPS 再提交。nginx:add_header Strict-Transport-Security ... always;
三、CSP:限制资源加载与脚本执行
Content-Security-Policy 是最强的纵深防御头:声明哪些来源的资源可以加载、是否允许内联脚本。示例:Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; img-src 'self' data:; object-src 'none'; frame-ancestors 'self'。它能把 XSS 的破坏力大幅削弱——即使注入了脚本标签,浏览器也拒绝执行非白名单来源的脚本。落地建议:先配 Content-Security-Policy-Report-Only 只报告不拦截,观察一两周日志确认无误伤后再切换为强制模式;内联脚本较多的老站迁移成本高,可用 nonce 方案逐步收窄。
四、其他常用头
X-Content-Type-Options: nosniff:禁止浏览器嗅探文件类型,防止上传的“图片”被当 HTML/JS 执行——配合上传目录禁止执行 PHP 使用效果更好。Referrer-Policy:控制跳转出去时带多少来源信息(strict-origin-when-cross-origin 是当前推荐),防止泄露 URL 中的敏感参数。Cache-Control:敏感页面(后台、账单)加 no-store,防止浏览器缓存与代理缓存泄露。Permissions-Policy:禁用不需要的浏览器能力(摄像头、地理位置),减少被滥用面。
五、配置与验证
nginx 在 server 或 location 层 add_header,注意 add_header 在 location 内会覆盖 server 层的同名头,公共头建议放 http 或 server 层并确认 always 参数(4xx/5xx 也输出)。验证工具:securityheaders.com 输入域名直接评级;curl -I 查看实际输出。每加一个头都要实测业务:CSP 最容易误伤(内联脚本、第三方统计被拦),务必用 Report-Only 过渡。
总结
安全响应头是性价比极高的防护:X-Frame-Options 防点击劫持、HSTS 防降级、CSP 限制脚本来源、nosniff 防类型嗅探。配置顺序建议:先 X-Frame-Options 与 nosniff(零风险)→ HSTS(确认 HTTPS 稳定后)→ CSP(Report-Only 过渡)。上线前用 securityheaders 自查,业务回归后再逐步收紧。