apache 上的 X-Frame-Options

Posted

技术标签:

【中文标题】apache 上的 X-Frame-Options【英文标题】:X-Frame-Options on apache 【发布时间】:2013-06-10 03:19:53 【问题描述】:

我正在尝试允许某些特定域通过 iframe 访问我的网站

Header set X-Frame-Options ALLOW-FROM https://www.that-site.com

我知道这可以通过将上面的行添加到 Apache 服务器的配置来完成。

这里有两个问题。

1) 应该添加哪个配置文件?在 Unix 和 windows 上运行的 apache,如果不是同一个文件

2) 在启用 all-from 的同时,我仍然希望能够从我自己的域中运行一些 iframe。我可以在允许后添加以下行吗?

 Header set X-Frame-Options SAMEORIGIN

或者我应该只添加我自己的域名,即

 Header set X-Frame-Options ALLOW-FROM https://www.that-site.com, http://www.my-own-domain.com

真的需要解决这个问题。提前致谢

【问题讨论】:

我也有类似的情况。出于安全原因(pci 要求),我已将Header append X-FRAME-OPTIONS "SAMEORIGIN" 添加到 DocumentRoot 内的 .htaccess 中。但是,我尝试添加以下内容以允许将页面嵌入推文中。不幸的是,运气并不好。我尝试将以下内容添加到 blog/ 子目录下的 .htaccess 中。 Header always append X-FRAME-OPTIONS ALLOW-FROM http://ht.ly/ 【参考方案1】:
    您可以添加到.htaccesshttpd.confVirtualHost 部分 Header set X-Frame-Options SAMEORIGIN这是最好的选择

Allow from URI 并非所有浏览器都支持。参考:X-Frame-Options on MDN

【讨论】:

@Raptor 可能在旧版本中,因为现在 Chrome 确实支持 ALLOW-FROM,我正在浏览一个带有 iframe 的 Intranet 站点,其站点将 X-Frame-Options 设置为此,我可以查看它们没有问题。 在 ubuntu 18.04 上使用 apache 我需要编辑 /etc/apache2/conf-enabled/ssl-params.conf 并将 'Header always set X-Frame-Options DENY' 替换为 'Header always追加 X-Frame-Options SAMEORIGIN' 并重启 apache 服务。【参考方案2】:

见X-Frame-Options header on error response

您可以简单地将以下行添加到 .htaccess

Header always unset X-Frame-Options

【讨论】:

这仅在您希望完全禁用 X-Frame-Options 时有用 - 在某些情况下这并不总是正确的解决方案。允许 Optimizely 运行需要管理 X-Frame-Options,这也意味着不断更新它。所有网站都应该使用 X-Frame-Options 来提高访问者的网站安全性。 谢谢!我被拒绝在框架中显示“example.com/admin/top.php”,因为它设置了多个“X-Frame-Options”标头的值冲突(“DENY,SAMEORIGIN”)。回退到“否认”。成功了!! 非常感谢!这解决了它,我的标头值设置为 DENY、SAMEORIGIN 并且在 VirtualHosts、Apache Config 和 htaccess 中回退到 DENY 更新不起作用。【参考方案3】:

它对我有什么作用,我在 http <VirtualHost *:80> 和 https <VirtualHost *:443> 虚拟主机块中添加了以下指令:

ServerName your-app.com
ServerAlias www.your-app.com

Header always unset X-Frame-Options
Header set X-Frame-Options "SAMEORIGIN"

这背后的原因是什么?默认情况下,如果设置,服务器不会重置 X-Frame-Options 标头,因此我们需要首先删除默认值,在我的情况下是 DENY,然后使用下一条规则将其设置为所需的值,在我的情况下SAMEORIGIN。当然你也可以使用Header set X-Frame-Options ALLOW-FROM ... 规则。

【讨论】:

developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…【参考方案4】:

这在所有浏览器上都适用于我:

    用我所有的 javascript 创建了一个页面 在同一服务器上创建了第二个页面,并使用对象标签嵌入了第一页。 在我的第三方网站上,我使用 Object 标签嵌入了第二个页面。 在原服务器的 public_html 文件夹中创建了一个 .htaccess 文件,并将 Header unset X-Frame-Options 放入其中。

【讨论】:

【参考方案5】:

我发现如果 httpd 服务器中的应用程序有一个规则,比如“如果 X-Frame-Options 标头存在并且有一个值,则不要理会它;否则添加标头 X-Frame-Options: SAMEORIGIN”然后一个httpd.conf mod_headers 规则如“Header always unset X-Frame-Options”是不够的。 SAMEORIGIN 值将始终到达客户端。

为了解决这个问题,我添加了两个而不是一个 mod_headers 规则(在最外层的 httpd.conf 文件中):

Header set X-Frame-Options ALLOW-FROM http://to.be.deleted.com early
Header unset X-Frame-Options

第一条规则告诉任何内部请求处理程序,其他代理已负责防止点击劫持,它可以跳过拯救世界的尝试。它以“早期”处理运行。第二条规则去掉了完全不需要的 X-Frame-Options 标头。它以“后期”处理运行。

我还添加了适当的 Content-Security-Policy 标头,这样世界仍然受到保护,而来自受信任站点的多源 Javascript 仍然可以运行。

【讨论】:

以上是关于apache 上的 X-Frame-Options的主要内容,如果未能解决你的问题,请参考以下文章

X-Frame-Options拒绝加载:domain.com/attachments/do-upload不允许框架

为啥以下代理不绕过 X-Frame-Options 标头?

具有冲突值的多个“X-Frame-Options”标头

安全防护:X-Frame-Options(点击劫持)

X-Frame-Options是什么?

X-Frame-Options 响应头