【问题标题】:I have two websites. I try to iframe from one to another but I get "iframe refused to connect"我有两个网站。我尝试从一个 iframe 切换到另一个,但我得到“iframe 拒绝连接”
【发布时间】:2022-11-24 17:52:46
【问题描述】:

我有两个网站。

这两个网站都位于同一个托管环境中。

我对托管环境有广泛的控制权。

一个网站是 Drupal 网站,另一个是静态网站(纯 HTML 网站)。

我试着iframe 嵌入第二个静态网站的 HTML 网页之一进入 Drupal 网站,但我得到:

iframe 拒绝连接



从浏览器控制台检查 Drupal 网站时,我得到:

拒绝在框架中显示“https://example.com/”,因为它将“X-Frame-Options”设置为“sameorigin”。

我不明白这个错误(sameorigin 不应该是允许嵌入的正确指令吗?)。

我应该更改什么安全指令以及在哪里更改以允许显示 iframe?

我已经尝试将以下指令放入第二个静态网站的.htaccess

<IfModule mod_headers.c>
    Header set X-Frame-Options "SAMEORIGIN"
</IfModule>

【问题讨论】:

  • 他们是from SAMEORIGIN吗?您将它们描述为两个网站,并且可能应该解释这种关系。我不确定这个问题是关于安全性的,而是关于网络开发的。
  • 这是两个不同的网站(不同的网络域)。我想我应该使用“ALLOW ALL”。

标签: apache iframe


【解决方案1】:

您应该阅读有关 origins 的内容(它们非常重要;它们是大多数网络安全边界的基础概念)。来源与网页的物理、逻辑或合法来源无关;浏览器不知道,也不能知道这些。起源只是元组(有序的固定长度集合)协议,主机名,港口. (这里的“主机名”通常是指完全限定的域名,而不仅仅是它的任何部分,但本地网络站点通常只使用主机名。)你说你“有两个站点”,我假设你的意思是它们有不同的网站域名。如果他们有不同的域名,他们不能具有相同的来源,因为元组的所有三个部分都必须匹配。因此,在其中一个上指定 SAMEORIGIN 显然不允许另一个对其进行框架;他们不是同一个来源!就任何人的浏览器所知,父页面是一个不相关的恶意站点,它试图违反潜在访客页面的安全限制。

可能的解决方案:

  • 从访客页面中删除 X-Frame-Options 指令。这会让任何人但是,请将其框起来,因此请确保这样做是可以的(如果第二页是静态的且未经身份验证,那么它当然是;任何人都可以通过提供相同的静态内容来简单地伪造嵌入,因此 XFO 不会为您做任何事情)。
  • 将 X-Frame-Options 标头(在访客页面上)替换为 Content-Security-Policy 标头,该标头指定允许父站点的 frame-ancestors 指令。
  • 将两个页面移动到同一来源,方法是将页面复制到其他服务器/站点,或者为从其他服务器抓取它的路径添加服务器端提取。
  • 使用 CORS 请求跨源的可嵌入内容,并将响应 HTML 嵌入父页面,可能在 iframe 的 srcdoc 中。 (包括在内只是为了完整性;这几乎肯定不是这里的最佳方法,因为正确配置 CORS 比其他选项要难得多。)

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多