← 返回题目列表

常见安全响应头有哪些?CSP、HSTS、X-Frame-Options 分别解决什么问题?

高频 中等 第 4 / 27 题 更新于 2026/07/31
安全响应头CSPHSTSX-Frame-Options

简化版

安全响应头是浏览器侧的纵深防御。CSP 限制脚本、样式、图片等资源来源,降低 XSS 危害;HSTS 强制浏览器以后使用 HTTPS;X-Frame-Options 或 CSP frame-ancestors 防点击劫持;还有 X-Content-Type-OptionsReferrer-PolicyPermissions-Policy 等。

详细版

安全响应头不能替代服务端鉴权和输入输出安全,但能让浏览器帮忙收紧攻击面。常见配置包括:CSP 限制资源加载和内联脚本;HSTS 防降级到 HTTP;X-Frame-Options: DENY/SAMEORIGIN 防页面被嵌入;X-Content-Type-Options: nosniff 防 MIME 嗅探;Referrer-Policy 控制 Referer 泄露。

面试回答要强调“纵深防御”:业务逻辑安全是第一层,安全响应头是浏览器执行层的补强。

完整版教学

一、安全响应头为什么有用

Web 安全不只靠后端代码。浏览器是执行 HTML、JS、CSS 的地方,它可以根据响应头限制页面能做什么。安全响应头就是服务端告诉浏览器:“这个页面只能按这些规则执行。”

server response headers -> browser policy -> block risky behavior

它的价值是减少漏洞被利用后的影响。例如 XSS 没完全防住,严格 CSP 仍可能阻止恶意脚本执行。

记忆钩子:安全响应头不是业务锁,而是浏览器执行策略;它不能决定谁有权限,但能限制页面能怎么被执行。

二、CSP 解决什么问题

CSP 全称 Content-Security-Policy,用来限制脚本、样式、图片、连接等资源来源。最典型的是限制脚本只能来自本站,减少 XSS 注入脚本执行的机会。

Content-Security-Policy: default-src 'self'; script-src 'self'

更严格的 CSP 会使用 nonce 或 hash 允许特定内联脚本,而不是打开 'unsafe-inline'。CSP 是 XSS 的纵深防御,不替代输出编码。

三、HSTS 解决什么问题

HSTS 让浏览器记住某个站点以后只能用 HTTPS 访问。即使用户输入 http://example.com,浏览器也会自动升级为 HTTPS。

Strict-Transport-Security: max-age=31536000; includeSubDomains

31536000 表示大约一年。开启 includeSubDomains 前要确保所有子域都支持 HTTPS,否则可能把子域访问弄坏。

四、点击劫持相关响应头

点击劫持是攻击者把目标页面放进 iframe,再用透明层诱导用户点击。防御可以用 X-Frame-Options 或 CSP 的 frame-ancestors

X-Frame-Options: DENY
Content-Security-Policy: frame-ancestors 'self'

frame-ancestors 更现代、表达能力更强。老系统中常见 SAMEORIGIN,表示只允许同源页面嵌入。

五、nosniff、Referrer 和权限策略

X-Content-Type-Options: nosniff 告诉浏览器不要猜 MIME 类型,避免把本该当文本的内容当脚本执行。Referrer-Policy 控制跳转或加载资源时带多少来源信息。Permissions-Policy 能限制摄像头、麦克风、定位等浏览器能力。

响应头主要防护常见值
X-Content-Type-OptionsMIME 嗅探nosniff
Referrer-Policy来源泄露strict-origin-when-cross-origin
Permissions-Policy浏览器能力滥用geolocation=()

这些头看似细碎,但能减少信息泄露和浏览器兼容行为带来的风险。

六、上线策略和兼容性

安全头不能盲目一把梭。CSP 配太严会让线上脚本、统计、图片或字体加载失败。通常先用报告模式观察,再切到强制模式。

Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report

HSTS 也要谨慎,尤其是 preloadincludeSubDomains。一旦进入浏览器预加载列表,回滚成本很高。

七、常见基线配置

普通业务站点可以从一组温和基线开始,再按业务收紧。比如先启用 nosniff、Referrer-Policy、frame-ancestors,再逐步把 CSP 从报告模式切到强制模式。

X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: frame-ancestors 'self'

安全头应放在统一网关、Nginx 或应用中间件里,避免某些页面漏配。多入口系统还要检查静态站、后台、API 文档是否都覆盖。

八、如何验证安全头生效

验证不只看配置文件,要看真实响应。经过 CDN、网关、反向代理后,头可能被覆盖、追加或丢失。可以用浏览器 DevTools、curl 或安全扫描工具检查。

curl -I https://example.com

如果页面依赖第三方脚本,CSP 生效后要重点看控制台报错和上报日志。先观测再强制,是减少线上事故的稳妥路径。

不同页面还可能有不同策略。后台管理可以更严格,公开营销页可能要加载统计脚本,文件下载域名可能只需要 nosniff 和下载相关头。安全头要分场景配置,但底线能力不能漏。

admin.example.com: strict CSP + frame deny
www.example.com: CSP with trusted analytics
download.example.com: nosniff + attachment policy

九、常见误区与追问

  • 误区:有了 CSP 就不用防 XSS。 CSP 是兜底,输出编码和富文本净化仍是主防线。
  • 误区:HSTS 可以修复证书错误。 证书错误仍会阻断访问,HSTS 只是强制 HTTPS。
  • 误区:X-Frame-Options 和 CORS 是一回事。 前者管能否被 iframe 嵌入,后者管跨源脚本读响应。
  • 追问:CSP 中 nonce 有什么用? 只允许带正确随机 nonce 的内联脚本执行。
  • 追问:为什么要 nosniff? 防浏览器 MIME 猜测导致内容被错误执行。
  • 追问:HSTS 的 max-age 怎么理解? 浏览器记住强制 HTTPS 的秒数。
  • 追问:安全头能代替鉴权吗? 不能,它只是浏览器侧策略,不是业务权限控制。

十、加强记忆

安全响应头可以记成“让浏览器替你守门”:CSP 管资源和脚本执行,HSTS 管强制 HTTPS,X-Frame-Options/frame-ancestors 管嵌入,nosniff 管类型猜测,Referrer-Policy 管来源泄露。它们都是纵深防御,不能代替服务端鉴权、输入校验和输出编码。