Spring Security에서 'X-Frame-Options'응답 헤더를 비활성화하는 방법은 무엇입니까?


90

내 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>태그 사이에 무엇을 써야합니까


1
아래 답변 중 컨트롤러 메서드 수준에서 SAMEORIGIN 또는 ALLOW를 적용 할 수 있는지 여부를 아직 다루지 않습니다.
Black

답변:


112

클릭 재킹 공격 X-Frame-Options을 방지하기 위해 기본적 으로 거부 됨으로 설정됩니다 . 이를 재정의하려면 스프링 보안 구성에 다음을 추가 할 수 있습니다.

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

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

  • DENY- 기본값입니다. 이렇게하면 사이트에 관계없이 페이지를 프레임에 표시 할 수 없습니다.
  • SAMEORIGIN- 나는 이것이 당신이 찾고있는 것이라고 가정하여 페이지가 페이지 자체와 동일한 출처의 프레임에 표시되고 표시 될 수 있습니다.
  • ALLOW-FROM- 페이지가 프레임에 표시 될 수있는 출처를 지정할 수 있습니다.

자세한 내용은 여기 를 참조 하십시오 .

그리고 XML 또는 Java 구성을 사용하여 헤더를 구성하는 방법을 확인 하십시오 .

필요 strategy에 따라 적절한을 지정해야 할 수도 있습니다 .


이것 httpheaders태그 의 네임 스페이스는 무엇입니까 ?
Pasupathi Rajamanickam 2015 년

4
이것을 컨트롤러 메서드 수준으로 적용 할 수 있습니까?
mad_fox

5
WebSecurityConfigurerAdapter의 구성 메소드 내에서 구성해야하는 경우 다음 코드를 작성하십시오.http.headers().frameOptions().sameOrigin();
russellhoff

@vtor 나는 봄 3.1을 사용하고 이것은 지원되지 않습니다. 제안 할 수있는 해결 방법이 있습니까?
Spring

@Spring docs.spring.io/spring-security/site/docs/current/reference/html/… 지원됩니다. 시도했지만 작동하지 않은 것을 공유해 주시겠습니까?
vtor

103

XML 구성 대신 Java 구성을 사용하는 경우 다음을 WebSecurityConfigurerAdapter.configure(HttpSecurity http)메소드에 넣으십시오 .

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

34
disable () 사용은 옵션이지만 동일한 서버에있는 경우 다음을 사용합니다.http.headers().frameOptions().sameOrigin();
Ian Newland

59

이 헤더를 완전히 비활성화하고 싶지는 않지만 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

1
3.X에서 4.X로 마이그레이션하고 첫 번째 예제를 기반으로 추가했기 때문에이 문제가 발생했습니다. 고마워.
steve

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.cache, security.headers.content-type, security.headers.hsts그리고 security.headers.xss당신이 사용할 수있는 속성. 자세한 내용은를 참조하십시오 SecurityProperties.


5
Spring Boot 2.x에서이 메소드는 더 이상 사용되지 않습니다. "보안 자동 구성은 더 이상 사용자 정의 할 수 없습니다. 대신 사용자 고유의 WebSecurityConfigurer Bean을 제공하십시오."
mrkernelpanic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.