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

ncecgwcz  于 2022-11-11  发布在  Spring
关注(0)|答案(8)|浏览(323)

我的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>标记之间写什么

kjthegm6

kjthegm61#

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

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

41zrol4v2#

默认情况下,X-Frame-Options被设置为denied,以防止clickjacking攻击。

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

以下是策略的可用选项

*DENY-是默认值。使用此值时,无论站点是否尝试在框架中显示页面,该页面都无法在框架中显示。
*SAMEORIGIN-我假设这就是您正在寻找的内容,以便页面将(并且可以)显示在与页面本身相同原点的框架中
*ALLOW-FROM-允许您指定一个原点,页面可以在该原点显示在框架中。

如需了解更多信息,请点击此处。
here来检查如何使用XML或Java配置来配置头。
请注意,您可能还需要根据需要指定适当的strategy

gc0ot86w

gc0ot86w3#

最有可能的情况是,您不想完全禁用此标题,而是使用SAMEORIGIN。如果您正在使用Java配置(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();
4c8rllxm

4c8rllxm4#

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

wxclj1h55#

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

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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

vtwuwzda6#

如果您使用的是Sping 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

ej83mcc0

ej83mcc07#

您应该配置多个HttpSecurity示例。
这是我的代码,其中只有***/public/请求没有X-Frame-Options*头。

@Configuration
public class SecurityConfig {

/**
 * Public part - Embeddable Web Plugin
 */

@Configuration
@Order(1)
public static class EmbeddableWebPluginSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
    protected void configure(HttpSecurity http) throws Exception {
        // Disable X-Frame-Option Header
        http.antMatcher("/public/**").headers().frameOptions().disable();
    }
}

/**
 * Private part - Web App Paths
 */

@Configuration
@EnableOAuth2Sso
public static class SSOWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
                .csrf().disable()
                .antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/public/**", "/", "/login**", "/webjars/**", "/error**", "/static/**", "/robots", "/robot", "/robot.txt", "/robots.txt")
                .permitAll()
                .anyRequest()
                .authenticated()
                .and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/bye");
    }

    /**
     * Public API endpoints
     */

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/api/**");
    }
  }
}
cuxqih21

cuxqih218#

这里太危险了。
测试者:

.headers().frameOptions().sameOrigin()

相关问题