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】:
-
您可以添加到
.htaccess
、httpd.conf
或VirtualHost
部分
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的主要内容,如果未能解决你的问题,请参考以下文章