如何在Spring Security中禁用“X-Frame-Options”响应头?

问题描述 投票:69回答:6

我在我的jsp上有CKeditor,每当我上传一些东西时,会弹出以下错误:

 Refused to display 'http://localhost:8080/xxx/xxx/upload-image?CKEditor=text&CKEditorFuncNum=1&langCode=ru' in a frame because it set 'X-Frame-Options' to 'DENY'.

我试过删除Spring Security,一切都像魅力一样。如何在spring security xml文件中禁用它?我应该在<http>标签之间写些什么

java spring spring-security spring-boot x-frame-options
6个回答
100
投票

默认情况下,X-Frame-Options被设置为拒绝,以防止clickjacking攻击。要覆盖它,可以将以下内容添加到spring security配置中

<http>    
    <headers>
        <frame-options policy="SAMEORIGIN"/>
    </headers>
</http>

以下是可用的政策选项

  • DENY - 是默认值。使用此页面无论站点是否尝试这样做,页面都无法显示在框架中。
  • SAMEORIGIN - 我认为这是你正在寻找的,所以页面将(并且可以)显示在与页面本身相同的原点的框架中
  • ALLOW-FROM - 允许您指定原点,页面可以在框架中显示。

有关更多信息,请查看here

here一起检查如何使用XML或Java配置来配置头文件。

请注意,您可能还需要根据需要指定适当的strategy


70
投票

如果您使用Java配置而不是XML配置,请将其放在WebSecurityConfigurerAdapter.configure(HttpSecurity http)方法中:

http.headers().frameOptions().disable();

47
投票

您很可能不想完全停用此标头,但请使用SAMEORIGIN。如果您正在使用Java Configs(Spring Boot)并且想要允许X-Frame-Options:SAMEORIGIN,那么您需要使用以下内容。


对于较旧的Spring Security版本:

http
   .headers()
       .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))

对于像Spring Security 4.0.2这样的新版本:

http
   .headers()
      .frameOptions()
         .sameOrigin();

16
投票

如果使用XML配置,您可以使用

<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:security="http://www.springframework.org/schema/security"> 
<security:http>
    <security:headers>
         <security:frame-options disabled="true"></security:frame-options>
    </security:headers>
</security:http>
</beans>

9
投票

如果您使用的是Spring Boot,则禁用Spring Security默认标头的最简单方法是使用security.headers.*属性。特别是,如果要禁用X-Frame-Options默认标头,只需将以下内容添加到application.properties

security.headers.frame=false

您还可以使用security.headers.cachesecurity.headers.content-typesecurity.headers.hstssecurity.headers.xss属性。有关更多信息,请查看SecurityProperties


6
投票

如果您使用的是Spring Security的Java配置,则默认情况下会添加所有默认安全标头。可以使用以下Java配置禁用它们:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .headers().disable()
      ...;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.