◾에러 파악하기
✔️Background
spring boot 를 이용하여 토이 프로젝트로를 진행중이었고, 로그인 관련된 인증 부분은 spring security를 이용하였다.
프로젝트를 진행하던 중, 인증을 모두 잘 마쳤는데 요청을 보낼 403 forbidden에러가 발생하였다.
혼란을 주었던 것이, GET요청은 잘 요청이 가는데 POST요청을 보내면 403 에러가 발생하였다.
심지어 혹시 몰라 모든 url에 대해서도 `permitAll()`로 허용을 해두어도 에러가 계속 발생했다.
◾에러 해결하기
우선 403에러는 주로 권한이 없을 때 발생하는 오류이다. 그럼 왜 권한이 없다고 뜨는 것인가?? url설정을 모두 허용하였는데도.
원인은 CSRF 였다.
CSRF란?
Cross-Site Request Forgery의 약자이다. 공격자가 사용자의 권한을 사용하여 웹 애플리케이션에서 의도하지 않은 요청을 만들도록 속이는 공격 방법이다. 공격자는 사용자가 이미 인증된 상태인 경우에 이를 악용하여 악성 요청을 전송한다.
CSRF 공격은 주로 사용자가 특정 웹 사이트에 로그인한 상태에서 공격이 발생하며, 사용자가 악의적인 웹 사이트에 방문하거나 악성 이메일을 통해 이뤄질 수 있다.
Spring Security에서는 CSRF공격을 방어하기 위해 기본적으로 CSRF 토큰을 사용한다. 이 토큰은 웹 페이지의 폼에 포함되어 사용자의 브라우저가 이를 서버에 전송하도록 한다. 서버는 이 토큰을 검증하여 요청의 유효성을 확인한다.
Spring Security에서 CSRF토큰을 활성화하면, 기본적으로 모든 POST,PUT,DELETE 등의 변경을 가하는 요청에 대해 해당 토큰이 필요하게 된다. 만약 프론트엔드와 백엔드가 분리되어 있을 경우, 프론트엔드에서는 이 토큰을 요청 헤더에 포함하여 전송해야 한다.
✔️해결 방안
`http.csrf().disable();` 또는 아래와 같이 csrf 토큰을 비활성화 시키는 코드를 추가해주면 된다. 위의 단락과 같은 이유로 스프링 시큐리티는 기본적으로 csrf을 체크하므로 변경을 요하는 요청들 POST등은 정상적으로 수행되지 않는 것이었다.
http
.csrf().disable()
참고
https://iseunghan.tistory.com/302
chat.openai.com
'웹 개발 > error' 카테고리의 다른 글
[error/jpa] SQL에러 Unknown Column in field list (0) | 2024.02.28 |
---|---|
[java/sql] 쿼리 작성 시 테이블명이 빨간 색일 때 해결법 (0) | 2024.02.23 |
[error/security] CORS란? Origin이란? (2) | 2024.01.10 |
[error] ERR_CONNECTION 서버가 꺼져있을 때 발생하는 연결 에러 (0) | 2024.01.03 |
컴파일 에러 vs 런타임 에러 차이점 (0) | 2023.11.23 |