首页/网络/协议速查/X-Frame-Options 防嵌套
HTTP 头与缓存70 条

X-Frame-Options 防嵌套

控制页面能否被 iframe 嵌套:DENY 完全禁止、SAMEORIGIN 仅同源允许,用于防点击劫持。

协议速查网络更新于 2026-10-13

限制页面被嵌套

X-Frame-Options 控制页面能否被 iframe 或 frame 嵌入,用于防点击劫持:攻击者把真实站点套在自己的页面里,诱导用户在看不见全貌的情况下点击。DENY 完全禁止嵌套,SAMEORIGIN 只允许同源页面嵌入。现代等价且更细粒度的能力是 CSP 的 frame-ancestors,两者同时存在时以 CSP 为准。

基本信息

方向响应头
规范RFC 7034
取值DENY、SAMEORIGIN;ALLOW-FROM 已废弃,各浏览器支持不一致
现代替代Content-Security-Policy: frame-ancestors 支持按来源白名单控制
适用范围整个页面响应,对 XHR 与静态资源无意义

取值对照

取值效果适用场景
DENY任何页面都不能嵌套,包括同源后台管理、支付等敏感页面
SAMEORIGIN仅同源页面可嵌套需要在自家页面内嵌自己的子页面
ALLOW-FROM 网址已废弃,现代浏览器忽略不要在新项目中使用
frame-ancestors 列表CSP 提供的细粒度白名单需要允许特定合作方嵌入时

Nginx 与 CSP 配置

Nginx 与 CSP 配置
# 基础写法
add_header X-Frame-Options SAMEORIGIN always;
# 需要更细粒度时用 CSP(与上面的头同时存在时以 CSP 为准)
add_header Content-Security-Policy "frame-ancestors 'self' https://partner.example.com" always;
# 校验
curl -sI https://example.com/ | grep -i -E 'x-frame-options|content-security-policy'

典型使用场景

  • 后台管理系统禁止被任何页面嵌套,防点击劫持
  • 站内已有 iframe 结构时用 SAMEORIGIN 保留自身嵌入能力
  • 开放平台需要允许合作方嵌入时改用 CSP 白名单
  • 安全基线检查与等保测评中的必查项
现代等价能力是 CSP 的 frame-ancestors,粒度更细:两者同时返回时以 CSP 为准;新项目建议直接用 CSP,老浏览器兼容才保留 X-Frame-Options。
嵌入自家子域页面时配 DENY 会把自己的界面也挡掉:跨子域在多数浏览器中不算同源,应使用 SAMEORIGIN 或通过 CSP 白名单显式列出各子域。
灰度与多域名场景要逐域核对:主站配了头而临时域名没配,攻击者可以拿未加头的入口做嵌套,安全评审时应把所有解析到同一服务的域名一起检查。

易错点

  • 期望用 DENY 挡掉搜索结果的缩略预览:那类展示依赖的是抓取与渲染能力,不是 iframe,解决方式不同
  • 以为带上该头就万事大吉:CSP 里若写了宽松的 frame-ancestors,实际策略以 CSP 为准,等于放开了嵌套
  • 在 iframe 场景里排查页面空白:先看响应头是否禁止嵌套,控制台一般会给出明确的拒绝提示
  • 只给首页加头、内页没加:点击劫持通常针对可执行敏感操作的内页,应全站统一配置并加 always 覆盖错误响应

数据来源与参考

  • RFC 7034 X-Frame-Options
  • W3C CSP(frame-ancestors)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌