【问题标题】:I need to remove or ignore the X-Frame-Options header. Should I use a proxy?我需要删除或忽略 X-Frame-Options 标头。我应该使用代理吗?
【发布时间】:2020-05-02 20:54:51
【问题描述】:

前提

我需要一种方法在来自a few websites 的响应到达my browser 之前删除X-Frame-Options 标头。

我这样做是为了正确渲染my custom kiosk webpage,其中有iframes 指向don't want to show up in frames 的网站。

我尝试过的

我尝试使用squid 设置代理并将其reply_header_access 选项配置为deny X-Frame-Options 标头,因为服务器接收到它们,但由于某种原因无法按预期工作。我已经确认我确实在通过 Squid 代理,并且我已经确认 X-Frame-Options 标头仍然存在,尽管我的 squid.conf 文件包含以下内容:

reply_header_access X-Frame-Options deny all

并使用 --enable-http-violations 选项构建了 squid(在我的 Mac 上使用 Homebrew)。

在追查了很多这种方法可能出现的问题后,我决定 reply_header_access 选项不能完全按照我的想法做(在将标头返回给客户端之前修改标头)。

所以,我尝试使用另一个代理服务器。在阅读a Stack Overflow question 询问与我的情况大致相似的情况后,我决定尝试使用node-http-proxy 库。但是,我以前从未使用过 Node,所以我很快就迷失了方向,并且我不知道如何为我的特定目的实现该库。

问题

使用 Node 似乎是一个非常简单的解决方案,那么如何使用 Node 设置代理来从响应中删除 X-Frame-Options 标头?

另外,为什么 Squid 不删除标题,即使我尝试设置它这样做?

最后的选择:有没有更简单的方法来实现我在iframe 中呈现我想要的任何页面的最终目标?

【问题讨论】:

  • 您是否设法设置代理并绕过 x-frame-options?

标签: node.js iframe proxy http-headers squid


【解决方案1】:

我使用了代理,特别是 mitmproxy 和以下脚本:

drop_unwanted_headers.py:

import mitmproxy

def requestheaders(flow: mitmproxy.http.HTTPFlow) -> None:
    for each_key in flow.request.headers:
        if each_key.casefold().startswith("sec-".casefold()):
            flow.request.headers.pop(each_key)

def responseheaders(flow: mitmproxy.http.HTTPFlow) -> None:
    if "x-frame-options" in flow.response.headers:
        flow.response.headers.pop("x-frame-options")
    if "content-security-policy" in flow.response.headers:
        flow.response.headers.pop("content-security-policy")

要运行它,请执行以下操作: mitmproxy --script drop_unwanted_headers.py

还要确保您的代理设置指向运行代理服务器的计算机(可能是localhost)并且使用了正确的端口。

【讨论】:

  • 如何使用 mitmproxy 运行这个脚本?
  • @EaswaramoorthyK 我猜他们在the documentation 中并没有表现得很明显,是吗……我会把这个添加到我的答案中。
猜你喜欢
  • 2018-03-10
  • 2015-09-19
  • 1970-01-01
  • 2016-09-14
  • 2017-06-13
  • 1970-01-01
  • 2013-11-16
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多