跳到主要内容

X-Frame-Options

2024年03月20日
柏拉文
越努力,越幸运

一、认识


X-Frame-Options 响应头是用来给浏览器指示允许一个页面可否在 <frame><iframe><embed> 或者 <object> 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免点击劫持攻击。

仅当访问文档的用户使用支持 X-Frame-Options 的浏览器时,此附加的安全性才会被提供。

二、语法


X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN

三、指令


3.1 DENY

DENY 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

3.2 SAMEORIGIN

SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示。规范让浏览器厂商决定此选项是否应用于顶层、父级或整个链,有人认为该选项不是很有用,除非所有的祖先页面都属于同一来源(origin

3.3 ALLOW-FROM uri

这是一个被弃用的指令,不再适用于现代浏览器,请不要使用它。在支持旧版浏览器时,页面可以在指定来源的 frame 中展示。请注意,在旧版 Firefox 上,它会遇到与 SAMEORIGIN 相同的问题——它不会检查 frame 所有的祖先页面来确定他们是否是同一来源。Content-Security-Policy HTTP 首部有一个 frame-ancestors 指令,你可以使用这一指令来代替。

四、配置


4.1 Web

使用 <meta> 标签来设置 X-Frame-Options 是无效的!例如 <meta http-equiv="X-Frame-Options" content="deny"> 没有任何效果。不要这样用!

4.2 Node

4.3 Nginx

配置 Nginx 发送 X-Frame-Options 响应头,把下面这行添加到 http, server 或者 location 的配置中:

add_header X-Frame-Options SAMEORIGIN always;

五、场景


5.1 防止页面被 Iframe 嵌入

X-Frame-Options 是一个HTTP响应头,用于控制网页是否允许被嵌套在iframe中。可以设置以下三个值之一:

  • DENY: 表示页面不能被任何iframe嵌套。

  • SAMEORIGIN: 表示只能由同源域名下的页面嵌套。

  • ALLOW-FROM uri: 表示页面可以被指定的源uri嵌套。

add_header X-Frame-Options SAMEORIGIN always;