【发布时间】:2015-03-19 11:31:26
【问题描述】:
我有两个网络应用程序:网络应用程序(web-app)和报告网络。我想在<iframe> 的网络应用程序中嵌入报告网络。所以它被浏览器拒绝并出现错误:
X 帧选项:拒绝
有什么帮助吗?
【问题讨论】:
标签: spring-security x-frame-options clickjacking
我有两个网络应用程序:网络应用程序(web-app)和报告网络。我想在<iframe> 的网络应用程序中嵌入报告网络。所以它被浏览器拒绝并出现错误:
X 帧选项:拒绝
有什么帮助吗?
【问题讨论】:
标签: spring-security x-frame-options clickjacking
编辑 (06.2020) - X-Frame 选项已过时:
“frame-ancestors 指令废弃了 X-Frame-Options 标头。如果资源同时具有这两种策略,则应该强制执行 frame-ancestors 策略,而应该忽略 X-Frame-Options 策略。”
@ 987654321@
所以考虑使用content-security-policy:
<headers>
<content-security-policy policy-directives="frame-ancestors 'self'"/>
</headers>
如果您使用的是 Spring Security 4.x,以下配置将解决您的问题(假设 webapp 在同一服务器地址上运行)。
XML 配置:
<http>
<!-- ... -->
<headers>
<frame-options policy="SAMEORIGIN" />
</headers>
</http>
Java 配置:
@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// ...
.headers().frameOptions().sameOrigin();
}
}
禁用配置
注意安全风险,您也可以禁用它。
http.headers().frameOptions().disable();
背景信息
在 Spring Security 3.2.0 中,引入了安全标头,但默认禁用:
http://spring.io/blog/2013/08/23/spring-security-3-2-0-rc1-highlights-security-headers/
在 Spring Security 4.x 中,默认情况下启用标头(对于 IFrame:X-Frame-Options:DENY):
“Spring Security 4.x 已更改 Java 配置和 XML 配置,以要求显式禁用默认值。”
http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-header
【讨论】:
HttpSecurity http 对象的先前配置。
configure() 没有被调用?
.and() 副本。
你可以使用
<headers>
<frame-options policy="SAMEORIGIN"/>
</headers>
在您的安全应用程序上下文 XML 中的 <http> 配置中
【讨论】:
X-Frame-options 的值可以是 DENY(默认)、SAMEORIGIN 和 ALLOW-FROM uri。 根据 Spring Security 文档,您可以告诉 Spring 以这种方式添加自定义标头来覆盖默认行为:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.headers()
.addHeaderWriter(new XFrameOptionsHeaderWriter(new WhiteListedAllowFromStrategy(Arrays.asList("www.yourhostname.com"))))
...
}
并且 Spring 应附加 X-Frame-Options: ALLOW-FROM ... 或
.addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
对于 X-Frame-Options: SAMEORIGIN 或使其完全禁用
http.headers().frameOptions().disable()
【讨论】: