通过 Nginx 绕过 X-Frame-Options 限制

编辑于2019年11月04日

X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面是否可以在 <frame>, <iframe>, <embed> 或者 <object> 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 Clickjacking 攻击。通过 Nginx 的作为正向代理,我们可以绕过 X-Frame-Options 限制成功的将第三方网页嵌入到自己的页面中。

X-Frame-Options

X-Frame-Options 响应头有三个可能的值:

  • deny:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
  • sameorigin: 表示该页面可以在相同域名页面的 frame 中展示。
  • allow-from uri: 表示该页面可以在指定来源的 frame 中展示。

在 Chrome 尝试加载 frame 的内容时,如果 X-Frame-Options 响应头设置为禁止访问,那么 Chrome 会在控制台中显示如下错误。

WX20191104-164740

通过 Nginx 正向代理访问

所谓正向代理就是当用户想获取某一台服务器上的数据而又无法直接访问服务器获取时,通过一台代理服务器“帮”他从目标服务器上取到数据。

在代理服务器上安装 nginx 并添加如下配置:

server {
        listen       8080;
        location / {
            proxy_hide_header X-Frame-Options;
            proxy_pass http://{target};
        }
    }

这也当请求 http://{proxy_server}:8080 时,nginx 会做代理转发到 http://{target},同时在返回结果的时候会隐藏掉 X-Frame-Options 相应头,这样我们自己的网页就能正常通过 iFrame 载入目标网页了。