KNOWLEDGE ARTICLE
X-Frame-Options 是什么?
页面嵌入限制、点击劫持防护
限制页面能否被其他页面通过 frame 或 iframe 嵌入。
核心解释
DENY 可禁止嵌入,SAMEORIGIN 只允许同源页面嵌入。现代站点也可使用 CSP 的 frame-ancestors 表达更细的来源规则。
X-Frame-Options 如何降低点击劫持机会
攻击者可以把目标页面透明或错位地嵌入 iframe,引导用户以为在点击诱饵,实际操作目标网站,这类攻击称为点击劫持。X-Frame-Options 通过 DENY 或 SAMEORIGIN 限制页面是否可被框架嵌入,减少敏感操作界面被覆盖利用。
DENY 禁止任何框架嵌入,SAMEORIGIN 允许同源页面。历史性的 ALLOW-FROM 支持不一致,不适合作为现代方案;CSP frame-ancestors 可以表达多个允许来源和更细粒度策略,通常是更灵活的替代。
浏览器如何判断页面是否允许嵌入
- 浏览器加载 iframe 响应后读取 X-Frame-Options 和 CSP frame-ancestors,并根据当前祖先页面来源决定是否渲染。
- SAMEORIGIN 涉及整个祖先链和浏览器实现,复杂多层嵌入不应只凭最外层 URL 猜测。
- 多个冲突 X-Frame-Options 值可能导致不同浏览器处理差异,应由单一响应层统一生成。
- 标头只保护返回它的页面;若登录、支付或设置页面漏配,首页有策略也不能覆盖这些敏感路径。
需要被合作方嵌入时如何设计
支付组件、报表和白标门户可能确实需要跨站嵌入。此时可用 CSP frame-ancestors 精确允许合作方来源,并把高风险操作与可嵌入展示页面分离,避免为兼容一个场景而开放整个站点。
点击劫持防护还可结合 SameSite Cookie、重新认证、明确确认和界面防误触,但客户端脚本“跳出 frame”容易被绕过,不应代替浏览器执行的响应策略。
实际应用与信息解读
取得 DENY、SAMEORIGIN 或 frame-ancestors 时,可以说明当前页面的嵌入约束。两者都存在时需要分析是否一致,不能只按字段数量评分。
未看到 X-Frame-Options 不表示没有保护,因为 CSP 可能提供等效或更强控制。只有两者均明确缺失,才可描述当前页面暂未发现响应层嵌入限制;是否存在可利用点击劫持还需看页面操作。
重点关注
缺少该标头时仍可能由 CSP 提供等效控制,因此需要同时检查两种配置。
常见问题
CSP frame-ancestors 与 X-Frame-Options 需要同时配置吗?
现代浏览器可使用 frame-ancestors,保留 X-Frame-Options 可兼容部分旧客户端,但两者应保持语义一致。
SAMEORIGIN 会允许所有子域嵌入吗?
同源要求 scheme、host 和 port 一致,普通不同子域并不天然属于同源。
缺少这两个标头就一定能点击劫持吗?
不一定。还取决于页面是否可嵌入、是否有敏感操作和其他防护,但缺少响应层限制会减少一层保护。