当我在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以支持多个域?
谢谢!
答案 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=csp和 https://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