Apache X-Frame-Options允许来自多个域

时间:2016-08-03 13:25:34

标签: apache x-frame-options

当我在apache中使用x-frame headers选项时出现错误。

Header always append X-Frame-Options ALLOW-FROM site1,site2,site3

Header always append X-Frame-Options ALLOW-FROM=site1,site2,site3

Header always append X-Frame-Options ALLOW-FROM=site1
Header always append X-Frame-Options ALLOW-FROM=site2
Header always append X-Frame-Options ALLOW-FROM=site3

我如何设置X-Frame-Options:ALLOW-FROM以支持多个域?

谢谢!

7 个答案:

答案 0 :(得分:3)

编辑17/01/2018: 这是正确的:

Header set X-Frame-Options SAMEORIGIN
Header append X-Frame-Options "ALLOW-FROM http://www.example.com/"  
Header append X-Frame-Options "ALLOW-FROM http://example.com/"
Header append X-Frame-Options "ALLOW-FROM https://www.example.com/"
Header append X-Frame-Options "ALLOW-FROM https://example.com/"

所以基本上你只允许来自你网站的iframe(SAMEORIGIN)并指定一个"追加"允许的网址列表。如果你没有添加"追加"每一行都会覆盖前一行。

这实际上适用于Internet Explorer 11,在Firefox 57中不起作用,并被Chrome忽略......

使用https://securityheaders.io进行测试不会给你一个" A"因为他们无法处理多个uri

We couldn't detect a valid configuration. Expected values are "DENY", "SAMEORIGIN", "ALLOW-FROM (URL)" and "ALLOWALL".

在IE11和Firefox中似乎有效的另一种可能性是:

 Header always set X-Frame-Options "ALLOW-FROM https://www.example.fr/ https://example.fr/ http://www.example.fr/ http://example.fr/"

它给出了一个" A"当您使用https://securityheaders.io

检查结果时

顺便说一下,我想知道使用世界上最常用的浏览器(Chrome)可以绕过安全设置的重点是什么?

答案 1 :(得分:2)

SetEnvIf Referer "^(https:\/\/.*\.example1\.com)/.*" X_FRAME_OPTIONS_ALLOWED=$1
SetEnvIf Referer "^(https:\/\/.*\.example2\.com)/.*" X_FRAME_OPTIONS_ALLOWED=$1

Header set X-Frame-Options SAMEORIGIN
Header append X-Frame-Options "ALLOW-FROM %{X_FRAME_OPTIONS_ALLOWED}e" env=X_FRAME_OPTIONS_ALLOWED`

答案 2 :(得分:2)

由于对ALLOW-FROM的支持在实现方式和对浏览器的支持方面都各不相同,因此我尝试了以下解决方案,该解决方案可以设置SAMEORIGIN或有条件地完全删除X-Frame-Options

尝试apache-2.4。

# Set X-Frame-Options SAMEORIGIN _unless_ the referer is any of my allowed sites.
# Add one or more SetEnvIf - whatever suits your purpose
# This part you MUST adapt.

# ALLOW https://my.allowed.site.com
SetEnvIf Referer "^https:\/\/my\.allowed\.site\.com\/.*" X_FRAME_OPTIONS_ALLOWED

# ALLOW https://mysite.tld.com and https://yoursite.tld.com
SetEnvIf Referer "^https:\/\/(mysite|yoursite)\.tld\.com\/.*" X_FRAME_OPTIONS_ALLOWED

# ALLOW https://mysite.tld.com and https://yoursite.theother.org
SetEnvIf Referer "^https:\/\/(mysite\.tld\.com|yoursite\.theother\.org)\/.*" X_FRAME_OPTIONS_ALLOWED

# Set X-Frame-Options = SAMEORIGIN _unless_ the referer is in the allow list.
Header always set X-Frame-Options SAMEORIGIN env=!X_FRAME_OPTIONS_ALLOWED

# Always _unset_ X-Frame-Options if the referer is in the allow list.
Header always unset X-Frame-Options env=X_FRAME_OPTIONS_ALLOWED

您可以添加多个SetEnvIf或展开正则表达式-YMMV。

您的同事会爱上您,因为它们使内容可读...

答案 3 :(得分:1)

Header always append X-Frame-Options ALLOW-FROM=site1
Header always append X-Frame-Options ALLOW-FROM=site2
Header always append X-Frame-Options ALLOW-FROM=site3

这种方式还可以。
但是当我第一次使用它时出现了错误 也许我犯了一个错误的角色。

答案 4 :(得分:0)

编辑17/01/2018:

以下解决方案不正确,因为每行的设置都会覆盖前一行。所以你只允许http://example.com/

最后我发现了正确的语法。根据这个网站: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

Header set X-Frame-Options "ALLOW-FROM https://example.com/"

这对我有用:

Header always set X-Frame-Options "ALLOW-FROM https://www.example.com/"
Header always set X-Frame-Options "ALLOW-FROM https://example.com/"
Header always set X-Frame-Options "ALLOW-FROM http://www.example.com/"
Header always set X-Frame-Options "ALLOW-FROM http://example.com/"

答案 5 :(得分:0)

X-Frame-Options规范仅指定使用DENY,SAMEORIGIN和ALLOW-FROM(https://tools.ietf.org/html/rfc7034#section-2.1)之一。有些浏览器可能支持多个ALLOW-FROM,但许多浏览器根本不支持ALLOW-FROM。

您最好的选择是使用frame-ancestors指令实现Content-Security-Policy标头。这允许配置多个URI,并且大多数浏览器都能理解这些URI,但是IE和Edge 14及更低版本。

对于IE和Edge 14支持,您还可以使用ALLOW-FROM设置X-Frame-Options。如果您创建值列入白名单,则可以根据引荐来设置ALLOW-FROM URI。

设置两个标题并不会有什么坏处。理解Content-Security-Policy框架祖先的浏览器将忽略X-Frame-Options,而那些不了解框架祖先的浏览器将忽略它并使用X-Frame-Options(如果可用)。结合 https://caniuse.com/#search=csphttps://caniuse.com/#search=x-frame-options这适用于所有浏览器,除了"适用于Android的UC浏览器和#34;

答案 6 :(得分:0)

值得注意的是,ALLOW-FROM正在removed from Firefox 70上,其他浏览器也可能随之而来。您将要改用CSP的frame-ancestors指令,about 90%浏览器支持该指令。

您的示例将是:

N=N+1