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'의 문제는 해결 할 수 있습니다.
그러나 어떤 경우에도 보안은 최우선으로 고려되어야 하며, 모든 변경 사항은 철저한 검토와 테스트를 거쳐야 합니다.
함께보면 좋은글
'Language > JSP' 카테고리의 다른 글
JSP에서 세션 활용하여 이전 페이지url 정보 유지하기 (0) | 2024.03.18 |
---|