X-Frame-Options
一、认识
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;