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


89

我在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>标签之间应该写些什么


1
以下所有答案均未解决是否可以在控制器方法级别应用SAMEORIGIN或ALLOW-有人知道吗?
黑色

Answers:


110

默认情况下X-Frame-Options设置为拒绝,以防止点击劫持攻击。要覆盖它,您可以将以下内容添加到您的spring安全配置中

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

以下是政策的可用选项

  • DENY-是默认值。使用此方法,无论站点试图这样做,都无法将页面显示在框架中。
  • SAMEORIGIN-我想这就是您要寻找的,因此该页面将(并且可以)显示在与页面本身具有相同起源的框架中
  • ALLOW-FROM-允许您指定可在页面中显示页面的原点。

有关更多信息,请在此处查看

在这里检查如何使用XML或Java的CONFIGS配置的标头。

请注意,您可能还需要strategy根据需要指定相应的。


这个httpheaders标签的命名空间是什么?
Pasupathi Rajamanickam,2015年

4
可以将其用作控制器方法级别吗?
mad_fox

3
如果需要在WebSecurityConfigurerAdapter的configure方法中进行配置,请编写以下代码:http.headers().frameOptions().sameOrigin();
russellhoff

@vtor我使用spring 3.1,不支持此功能,您可能会建议采用任何解决方法?
春季

@ Springdocs.spring.io/ spring- security/ site/ docs/ current/ reference/html/…受支持。您能否分享一下您尝试过但没有奏效的内容?
vtor

102

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

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

34
使用disable()是一个选项,但是如果它在同一台服务器上,请使用http.headers().frameOptions().sameOrigin();
Ian Newland

59

您最有可能不想完全停用此Header,而是使用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();

如何在Spring 3.2.12中进行配置?
Pasupathi Rajamanickam,2015年

1
从3.X迁移到4.X,并在第一个示例的基础上附加了该内容。谢谢。
史蒂夫(Steve)2013年

18

如果使用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>

11

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

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .headers().disable()
      ...;
  }
}

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


5
在Spring Boot 2.x中,不赞成使用此方法。“安全性自动配置不再可自定义。请提供您自己的WebSecurityConfigurer bean。”
mrkernelpanic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.