【问题标题】:X-Frame-Options on apacheapache 上的 X-Frame-Options
【发布时间】: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/

标签: apache cross-browser x-frame-options clickjacking


【解决方案1】:
  1. 您可以添加到.htaccess、httpd.conf 或VirtualHost 部分
  2. 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 ... 规则。

【解决方案4】:

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

  1. 用我所有的 javascript 创建了一个页面
  2. 在同一服务器上创建了第二个页面,并使用对象标签嵌入了第一页。
  3. 在我的第三方网站上,我使用 Object 标签嵌入了第二个页面。
  4. 在原服务器的 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 仍然可以运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-09
      • 2016-07-12
      • 2018-03-18
      • 2014-05-10
      • 2014-02-11
      • 1970-01-01
      • 2018-06-08
      • 2017-12-07
      相关资源
      最近更新 更多