source

Spring Security에서 'X-Frame-Options' 응답 헤더를 비활성화하려면 어떻게 해야 합니까?

manysource 2022. 12. 24. 17:45

Spring Security에서 'X-Frame-Options' 응답 헤더를 비활성화하려면 어떻게 해야 합니까?

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 xml 파일에서 이를 비활성화하려면 어떻게 해야 합니까?이 사이에 뭐라고 써야 할까요?<http>태그

XML 구성 대신 Java 구성을 사용하는 경우,WebSecurityConfigurerAdapter.configure(HttpSecurity http)방법:

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

디폴트X-Frame-Options거부로 설정하여 클릭잭킹 공격을 방지합니다.이를 덮어쓰려면 스프링 보안 구성에 다음을 추가합니다.

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

정책에 사용할 수 있는 옵션은 다음과 같습니다.

  • DENY - 기본값입니다.이렇게 하면 페이지를 프레임에 표시할 수 없습니다.사이트에 관계없이 표시할 수 없습니다.
  • SAME ORIGIN - 이것이 당신이 찾고 있는 것이라고 생각합니다.그러면, 페이지는, 페이지 자체와 같은 발신기지 프레임에 표시됩니다(또, 표시할 수 있습니다).
  • ALLOW-FROM - 페이지를 프레임에 표시할 수 있는 원점을 지정할 수 있습니다.

자세한 것은, 여기를 봐 주세요.

여기서 XML 또는 Java Configuration을 사용하여 헤더를 설정하는 방법을 확인합니다.

주의: 적절한 지정이 필요할 수 있습니다.strategy니즈를 기반으로 합니다.

대부분의 경우 이 헤더를 완전히 비활성화하고 싶지 않지만SAMEORIGINJava Configurations 를 사용하고 있는 경우(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();

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>

Spring Security의 Java 구성을 사용하는 경우 기본적으로 모든 기본 보안 헤더가 추가됩니다.다음의 Java 설정을 사용해 디세블로 할 수 있습니다.

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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

스프링 부트를 사용하는 경우 스프링 보안 기본 헤더를 비활성화하는 가장 간단한 방법은security.headers.*특성.특히 디세블로 하는 경우X-Frame-Options디폴트 헤더에 다음 명령어를 추가합니다.application.properties:

security.headers.frame=false

또 있다security.headers.cache,security.headers.content-type,security.headers.hsts그리고.security.headers.xss사용할 수 있는 속성.상세한 것에 대하여는, 을 참조해 주세요.

여러 Http Security 인스턴스를 설정해야 합니다.

이것은 X-Frame-Options 헤더가 없는 /public/** 요청만 있는 코드입니다.

@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/**");
    }
  }
}

언급URL : https://stackoverflow.com/questions/28647136/how-to-disable-x-frame-options-response-header-in-spring-security