apache 我有两个网站,我试图从一个到另一个iframe,但我得到“iframe拒绝连接”

8hhllhi2  于 2022-11-25  发布在  Apache
关注(0)|答案(1)|浏览(233)

此问题来自信息安全Stack Exchange的migrated,因为它可以在12小时前的Stack Overflow. Migrated上回答。
我有两个网站。
这两个网站位于同一个托管环境。
我对托管环境有广泛的控制权。
一个网站是Drupal网站,另一个是静态网站(纯HTML网站)。
我尝试将第二个静态网站的一个HTML网页iframe嵌入到Drupal网站中,但是我得到:
iframe拒绝连接

当从浏览器控制台检查Drupal网站时,我得到:
拒绝在框架中显示“https://example.com/”,因为它将“X-Frame-Options”设置为“sameorigin”。
我不明白这个错误(sameorigin不应该是允许嵌入的正确指令吗?)
我应该更改什么安全指令,在哪里,以允许显示iframe?
我已经尝试将以下指令放在第二个静态网站的.htaccess中:

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

2lpgd9681#

您应该仔细阅读origins(它们非常重要;它们是大多数Web安全边界的基础概念)。来源与Web页面的物理、逻辑或法律的来源无关;浏览器不知道,也不可能知道任何这些。源只是协议主机名端口的元组(有序的固定长度集合)。(这里的“主机名”通常表示完全合格的域名,而不是它的任何部分,但是本地网络站点通常只使用主机名。)您说您“有两个站点”,如果它们有不同的域名,它们 * 不 * 可能有相同的起源,因为元组的三个部分必须匹配。它们不是同一个来源!任何人的浏览器都知道,父页面是一个不相关的恶意站点,它试图违反潜在访客页面的安全约束。
可能的解决方案:

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

相关问题