Closed binchoo closed 2 years ago
[singer-webapp-boot] 프로젝트에서 csrf 지원을 활성했을 때 logout이 동작하지 않네요. 이런 효과가 나타나는 연관성을 알고 싶습니다.
http.csrf.disable()
@Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/*").permitAll() .and() .authorizeRequests().antMatchers("/singers/**").authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .logoutUrl("/logout") .logoutSuccessUrl("/singers"); //.and() //.csrf().disable(); } }
/singers
/login
/logout
이렇게 csrf 지원을 활성 후 /logout이 동작하지 않는 모습입니다. CSRF 토큰의 정의와 사용법 그리고 스프링 시큐리티의 CSRF 지원이란 무엇이며. 해당 옵션 활성시 /logout이 동작하지 않게 된 이유를 알아야 할 것 같습니다.
csrf 활성 상태에서 /logout 요청 및 응답 패킷 (404 내려옴)
csrf 비활성 상태에서 /logout 요청 및 응답 패킷 (302 내려와서 정상)
@caffeine-library/readers-pro-spring-5
CSRF 공격을 막기 위해 GET 요청을 막고 있을 가능성이 있다.
예제는 GET 메서드로 logout을 요청했기 때문에.. POST 요청 실험이 필요하다.
LogoutConfigurer.java 코드 확인 시, POST 리퀘스트만 인식하는 점을 확인 가능하다.
공식 문서에 따르면 [링크]
로그아웃 기능을 POST로만 제공한다면 CSRF 토큰이 반드시 요구되므로, 로그아웃 강제 공격을 방지할 수 있다는 점을 이유로 들고 있다. 100% ensure는 안 된다. 로그아웃 요청을 트리거하는 DOM 이벤트를 자바스크립트로 생성할 수만 있다면 악의적으로 로그아웃을 유발할 수 있음. (XSS) 아무튼 POST로 로그아웃을 제공하는 것이 보안 향상에는 도움이 된다.
질문
[singer-webapp-boot] 프로젝트에서 csrf 지원을 활성했을 때 logout이 동작하지 않네요. 이런 효과가 나타나는 연관성을 알고 싶습니다.
상세 내용
http.csrf.disable()
하지 않음> 즉 csrf 지원 활성화 함./singers
페이지> 임의 뷰 클릭>/login
인터셉트된 화면> user / user 로 로그인> 주소창으로/logout
수행이렇게 csrf 지원을 활성 후
/logout
이 동작하지 않는 모습입니다. CSRF 토큰의 정의와 사용법 그리고 스프링 시큐리티의 CSRF 지원이란 무엇이며. 해당 옵션 활성시/logout
이 동작하지 않게 된 이유를 알아야 할 것 같습니다.연관 챕터
93
참고
csrf 활성 상태에서
/logout
요청 및 응답 패킷 (404 내려옴)csrf 비활성 상태에서
/logout
요청 및 응답 패킷 (302 내려와서 정상)@caffeine-library/readers-pro-spring-5