访问控制允许标题不允许加载iframe的内容

时间:2018-03-15 09:58:46

标签: php iframe access-control x-frame-options

我在同一目录中有两个php页面。这些是edit_page.phppage.php

edit_page.php有一个所见即所得的编辑器,我可以通过iframe编辑另一个页面的内容。 iframe的来源为page.php,其中包含?page_id=XXX

当我转到page.php?page_id=XXX时,我可以看到以下标题:

enter image description here

但是当我转到edit_page.php?page_id=XXX时,我在控制台中看到以下错误:

enter image description here

我尝试将标题放在页面中发送请求只是为了笑,即使我知道它正在发出请求而不是发送响应标题....值得一试:P

enter image description here

我发送的标题是:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST");
header("Access-Control-Allow-Headers: Content-Type");
header("X-Frame-Options: *"); 

我对这个问题有点困惑我以前从未遇到过这类问题。如果有人能指出我正确的方向,那将非常感激。

此外,如果有人能够解释为什么会发生这种情况,那将是非常好的。我的理解是,这会发生在来自交叉原点的页面,例如从不在同一域中的外部源加载内容。但显然这两个文件不仅存在于同一个域中,而且位于同一目录中。

2 个答案:

答案 0 :(得分:0)

错误消息显示https://lifting365.com/EUR/beta/admin/page/已设置X-Frame-Options: sameorigin

您似乎在X-Frame-Options: *上设置了http://lifting365.com/something/edit_page?page_id=1(这不是标题的有效值,请尝试reading the documentation查看允许的值)。

所以第一个问题是你在错误的网页上设置标题

您要在框架中显示需要授予权限的页面。包含<iframe>元素的页面不需要授予自己包含iframe的权限!

你的第二个问题是你的基本方法是错误的。

您不应该尝试降低安全限制,以便可以在http://lifting365.com`上显示https://lifting365.com的页面。您应该将所有页面移动到HTTPS。

这会:

  • 让它们更安全可靠
  • 将它们放在同一个原点(消除您要问的问题)
  

此外,如果有人能够解释为什么会发生这种情况,那将是非常好的。

使两个起源相同的一个因素是共享URL方案。 http:https:不同。

答案 1 :(得分:0)

好的,现在我觉得很蠢....

我有:

<iframe name="richTextField" id="wysiwyg" src="page?page_id=1"></iframe>

而不是:

<iframe name="richTextField" id="wysiwyg" src="page.php?page_id=1"></iframe>

我认为脑死了