Language/JSP

JSP에서 spring security 적용 후 iframe 사용 시 Refused to display in a frame because it set 'X-Frame-Options' to 'deny' 에러

멱군 2024. 3. 19. 09:09

JSP에서 iframe을 사용했을 때 갑자기 'X-Frame-Options' to 'deny'에러가 난적이 있으신가요? 특히 Spring Security를 java framework에 적용하면서 Refused to display in a frame because it set 'X-Frame-Options' to 'deny'의 내용이 뜨면서 원하는 페이지가 나오지 않는 경우가 발생합니다. 하지만 이 에러는 클릭재킹 공격을 방지하기 위한 방안이기도 합니다. 그래서  이번 글에서는 iFrame을 유연하게 사용할 수 있도록 Spring Security 설정하는 방법을 알아보도록 하겠습니다. 

 

 

X-Frame-Options 헤더란 무엇인가?

'X-Frame-Options' HTTP 헤더는 웹 애플리케이션에서 페이지가 다른 페이지의 iFrame 내에서 렌더링되는 것을 제어하는 데 사용됩니다.

이 헤더는 주로 클릭재킹 공격을 방지하기 위해 사용되며, 여러 설정 옵션을 제공합니다

 

DENY

모든 iFrame에서의 페이지 로딩을 금지합니다.

 

SAMEORIGIN

같은 도메인 내의 iFrame에서만 페이지 로딩을 허용합니다.

 

ALLOW-FROM uri

특정 출처의 iFrame에서 페이지 로딩을 허용합니다.

 

Spring Security에서 X-Frame-Options 적절하게 설정하기

Spring Security는 기본적으로 보안성을 높이기 위해 'X-Frame-Options'를 'DENY'로 설정합니다.

그러나 iFrame을 통한 콘텐츠 통합이 필요한 경우, 이 설정을 'SAMEORIGIN'으로 변경하거나 특정 경우에는 헤더를 완전히 비활성화할 필요가 있을 수 있습니다.

 

Spring Security 설정에 SAMEORIGIN 적용

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // 기존 보안 설정
            .headers()
                .frameOptions().sameOrigin()
            // 기타 필요한 보안 설정들
            ;
    }
}

cotrollor에서 값을 조정 할 수 있습니다.

저같은 경우는 java > configuration > SecurityConfig.java 파일에 위의 내용을 추가 적용해두었습니다.

이렇게 설정하면 같은 출처 정책을 적용하여, 동일한 도메인에서 호스팅되는 iFrame 내에서 페이지가 로드될 수 있도록 허용합니다.

 

X-Frame-Options 비활성화

// 위의 .frameOptions().sameOrigin() 부분을 아래와 같이 변경합니다.
.frameOptions().disable()

위 설정은 'X-Frame-Options' 헤더를 비활성화하여 모든 iFrame에서 페이지 로드를 허용합니다.

하지만 이 설정은 웹 애플리케이션의 보안 수준을 감소시킬 수 있으니 이부분은 마지막 방법으로 사용하기를 추천드려요.

 

주의사항

  • 보안 설정을 조정할 때는 애플리케이션의 전반적인 보안 아키텍처를 한번 더 생각해봐야 합니다. 
  • 동일한 도메인 혹은 특정 페이지에만 'X-Frame-Options'를 완화하는 방법을 사용하는게 좋아요.
  • 가능하다면, 'Content-Security-Policy' 헤더를 함께 사용하면 좋습니다.
  • 클릭재킹 공격에 대한 보호를 완전히 해제하기보다는 필요한 최소 범위 내에서 설정하세요.

 

결론

Spring Security에서 'X-Frame-Options'의 적절한 설정은 웹 애플리케이션의 기능성과 보안성 사이의 균형을 맞추는 데 중요합니다.

iFrame을 사용해야 하는 경우에는 'SAMEORIGIN' 옵션을 사용한다면, Refused to display in a frame because it set 'X-Frame-Options' to 'deny'의 문제는 해결 할 수 있습니다.

그러나 어떤 경우에도 보안은 최우선으로 고려되어야 하며, 모든 변경 사항은 철저한 검토와 테스트를 거쳐야 합니다.

 

함께보면 좋은글

 

CORS는 왜 사이트를 만들 때 어렵게 만드는거야?

CORS(Cross-Origin Resource Sharing)는 웹 개발자들 사이에서 빈번하게 논의되는 주제입니다. 하지만 웹사이트 개발에 있어서 필수 보안 정책입니다. 웹사이트를 만들 때 마주치는 다양한 도전 중 하나인

devit.koreacreatorfesta.com

 

[web] 개발 할 때 iframe을 사용해야 하는가?

웹페이지를 개발하다보면 외부 콘텐츠를 삽입하기 위해서 iframe을 사용할 때가 종종 있다. 가령 유튜브를 블로그안에 넣는다고 해도 iframe을 이용해서 붙여넣도록 소스코드를 지원하고 있다. 웹

devit.koreacreatorfesta.com