2024. 12. 31. 22:23ㆍDev/SpringBoot
[ 현상 ]
스프링부트 개인 스터디 중인데, h2 db 연결한 후, 웹브라우저에서
localhost:8080/h2-console로 접속해서 로그인 했더니, 아래처럼 화면이 제대로 출력되지 않는 오류가 발생함.
[ 해결 ]
1. 스프링시큐리티에서 'h2-console' uri 접근에 대한 권한이 막혀 있는지 확인
- 아래와 같이 모든 요청을 허용했으므로, 권한 문제는 아님
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable) // CSRF 비활성화 (새로운 문법)
.authorizeHttpRequests(authz -> authz
.anyRequest().permitAll() // 모든 요청 허용
)
2. 스프링시큐리티에서 x-frame-option 설정 추가
- 아래처럼 .headers((headerConfig) -> headerConfig.frameOptions(FrameOptionsConfig::sameOrigin)); 구문 추가
- 스프링시큐리티에서는 X-Frame-Options 라는 보안에 관련된 헤더 값을 설정할 수 있는데, 해당 값에 대한 설정을 따로 해주지 않아서 발생한 현상이다.
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable) // CSRF 비활성화 (새로운 문법)
.authorizeHttpRequests(authz -> authz
.anyRequest().permitAll() // 모든 요청 허용
)
.formLogin(form -> form // formLogin 설정
// .loginPage("/login") // 커스텀 로그인 페이지 설정 (옵션)
.permitAll() // 로그인 페이지는 인증 없이 접근 가능
)
.headers((headerConfig) -> headerConfig.frameOptions(FrameOptionsConfig::sameOrigin));
return http.build();
}
X-Frame-Options 이란?
X-Frame-Options는 웹 보안 헤더 중 하나로, 웹 애플리케이션이 다른 웹 페이지의 <iframe> 요소 안에서 로드되는 것을 제어하는 데 사용됩니다. 스프링 시큐리티(Spring Security)는 이러한 보안 헤더를 쉽게 설정할 수 있도록 지원합니다.
X-Frame-Options의 역할
이 헤더는 클릭재킹(Clickjacking) 공격을 방지하기 위해 설계되었습니다. 클릭재킹은 악의적인 웹사이트가 사용자를 속여 특정 버튼을 클릭하게 하거나, 민감한 데이터를 의도치 않게 입력하도록 유도하는 공격입니다. 공격자는 정상 웹사이트의 콘텐츠를 자신들의 웹사이트의 <iframe>으로 로드하여 이러한 공격을 수행합니다.
X-Frame-Options의 주요 값
- DENY
- 해당 페이지는 어떤 경우에도 다른 페이지의 <iframe>에서 로드되지 않도록 합니다.
- SAMEORIGIN
- 동일한 도메인에서만 <iframe>으로 로드할 수 있습니다.
- ALLOW-FROM {URL} (현재 일부 브라우저에서만 지원됨)
- 지정된 URL에서만 <iframe>으로 로드할 수 있습니다.
스프링 시큐리티에서 설정 방법
스프링 시큐리티에서는 보안 헤더를 설정하거나 비활성화할 수 있습니다. 기본적으로 스프링 시큐리티는 X-Frame-Options를 활성화하며, 기본값으로 DENY를 사용합니다.
'Dev > SpringBoot' 카테고리의 다른 글
springboot H2 database 연결 오류 "mem:testdb" not found (0) | 2023.08.10 |
---|---|
스프링부트에서 JsonView 사용법 (2) | 2021.06.27 |
레거시 코드에 대한 고민 (0) | 2021.06.26 |