启用子域 iframe 访问
enable subdomain iframe access
我正在尝试在 y.example.com
托管的网页上显示来自 x.example.com 的 iframe
这是我为
所做的设置
Tomcat:
<filter>
<filter-name>ClickJackFilterEnabled</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>antiClickJackingEnabled</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ClickJackFilterEnabled</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Spring 安全性:
httpResponse.setHeader("Content-Security-Policy", "default-src 'self' *.example.com; style-src 'self' *.googleapis.com *.amazonaws.com 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; child-src 'self' *.example.com; font-src *;img-src 'self' *.amazonaws.com");
httpResponse.setHeader("Access-Control-Allow-Origin", "http://*.example.com");
当我打开带有嵌入式 ifram 的页面时,我仍然收到此错误:
Refused to display 'http://x.example.com/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
Uncaught SecurityError: Sandbox access violation: Blocked a frame at "http://y.example.com" from accessing a frame at "http://x.example.com". The frame being accessed is sandboxed and lacks the "allow-same-origin" flag.
当我使用 curl 检查 headers 时,header X-Frame-Options 不存在
这是 curl 的输出
* Rebuilt URL to: y.example.com/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 127.0.0.1...
* Connected to y.example.com (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: y.example.com
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Application-Context: application:dev:8080
< Content-Security-Policy: default-src 'self' *.example.com; style-src 'self' *.googleapis.com *.amazonaws.com 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; child-src 'self' *.example.com; font-src *;img-src 'self' *.amazonaws.com
< Access-Control-Allow-Origin: http://*.example.com
< Content-Type: text/html;charset=UTF-8
< Content-Language: en-IN
< Transfer-Encoding: chunked
< Date: Wed, 20 Jul 2016 13:21:57 GMT
<
{ [8200 bytes data]
我错过了什么?
更新:
我试过设置
document.domain = "example.com"
在两个网页上,我仍然收到错误
Refused to display 'http://x.example.com/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'
当我打字时
document.domain
在 javascript 控制台中,我得到
"example.com"
在两个网页上。所以两个页面的来源相同。
x.example.com 是发送 SAMEORIGIN header 的人。 y.example.com 无法覆盖它,因为那样就无法阻止 iframe 包含。一个站点必须向其他站点授予权限(由于缺少来源政策或具有权限的站点列表)以包含其内容。
检查来自 x.example.com 的 header,您应该会看到该策略实际上阻止了 iframe。
终于解决了这个问题。问题可能出在浏览器如何处理 X-Frame-Options header.
设置背后的概念
document.domain = "example.com"
是为了使两个网页的来源相同。浏览器允许将 origin 设置为 parent 域,因此位于 a.x.example.com 的页面可以设置 document.domain[=33= 的值] 至 x.example.com 或 example.com
现在,即使在将 document.domain 设置为 example.com 之后,我仍然收到错误消息
Refused to display 'http://x.example.com/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'
当我完全删除 X-Frame-Options header 时,使用
http.headers().frameOptions().disable();
在 securityConfiguration.java 中,成功了!
我不知道浏览器不支持 document.domain 设置的原因。在 mozilla 文档或其他任何地方找不到任何关于此的内容。希望这对某人有所帮助。
我正在尝试在 y.example.com
托管的网页上显示来自 x.example.com 的 iframe这是我为
所做的设置Tomcat:
<filter>
<filter-name>ClickJackFilterEnabled</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>antiClickJackingEnabled</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ClickJackFilterEnabled</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Spring 安全性:
httpResponse.setHeader("Content-Security-Policy", "default-src 'self' *.example.com; style-src 'self' *.googleapis.com *.amazonaws.com 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; child-src 'self' *.example.com; font-src *;img-src 'self' *.amazonaws.com");
httpResponse.setHeader("Access-Control-Allow-Origin", "http://*.example.com");
当我打开带有嵌入式 ifram 的页面时,我仍然收到此错误:
Refused to display 'http://x.example.com/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
Uncaught SecurityError: Sandbox access violation: Blocked a frame at "http://y.example.com" from accessing a frame at "http://x.example.com". The frame being accessed is sandboxed and lacks the "allow-same-origin" flag.
当我使用 curl 检查 headers 时,header X-Frame-Options 不存在
这是 curl 的输出
* Rebuilt URL to: y.example.com/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 127.0.0.1...
* Connected to y.example.com (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: y.example.com
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Application-Context: application:dev:8080
< Content-Security-Policy: default-src 'self' *.example.com; style-src 'self' *.googleapis.com *.amazonaws.com 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; child-src 'self' *.example.com; font-src *;img-src 'self' *.amazonaws.com
< Access-Control-Allow-Origin: http://*.example.com
< Content-Type: text/html;charset=UTF-8
< Content-Language: en-IN
< Transfer-Encoding: chunked
< Date: Wed, 20 Jul 2016 13:21:57 GMT
<
{ [8200 bytes data]
我错过了什么?
更新:
我试过设置
document.domain = "example.com"
在两个网页上,我仍然收到错误
Refused to display 'http://x.example.com/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'
当我打字时
document.domain
在 javascript 控制台中,我得到
"example.com"
在两个网页上。所以两个页面的来源相同。
x.example.com 是发送 SAMEORIGIN header 的人。 y.example.com 无法覆盖它,因为那样就无法阻止 iframe 包含。一个站点必须向其他站点授予权限(由于缺少来源政策或具有权限的站点列表)以包含其内容。
检查来自 x.example.com 的 header,您应该会看到该策略实际上阻止了 iframe。
终于解决了这个问题。问题可能出在浏览器如何处理 X-Frame-Options header.
设置背后的概念
document.domain = "example.com"
是为了使两个网页的来源相同。浏览器允许将 origin 设置为 parent 域,因此位于 a.x.example.com 的页面可以设置 document.domain[=33= 的值] 至 x.example.com 或 example.com
现在,即使在将 document.domain 设置为 example.com 之后,我仍然收到错误消息
Refused to display 'http://x.example.com/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'
当我完全删除 X-Frame-Options header 时,使用
http.headers().frameOptions().disable();
在 securityConfiguration.java 中,成功了!
我不知道浏览器不支持 document.domain 设置的原因。在 mozilla 文档或其他任何地方找不到任何关于此的内容。希望这对某人有所帮助。