SpringSecurity 사용 시, H2 console 화면 localhost에서 연결을 거부했습니다.

2024. 12. 31. 22:23Dev/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의 주요 값

  1. DENY
    • 해당 페이지는 어떤 경우에도 다른 페이지의 <iframe>에서 로드되지 않도록 합니다.
  2. SAMEORIGIN
    • 동일한 도메인에서만 <iframe>으로 로드할 수 있습니다.
  3. ALLOW-FROM {URL} (현재 일부 브라우저에서만 지원됨)
    • 지정된 URL에서만 <iframe>으로 로드할 수 있습니다.

스프링 시큐리티에서 설정 방법

스프링 시큐리티에서는 보안 헤더를 설정하거나 비활성화할 수 있습니다. 기본적으로 스프링 시큐리티는 X-Frame-Options를 활성화하며, 기본값으로 DENY를 사용합니다.

 

반응형