일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- react
- skt membership
- Codility
- 미디어 쿼리
- Javascript
- 포토샵
- CSS
- 수학
- c++
- REM
- spring
- 상태
- 소수
- 알고리즘
- Prefix Sums
- float
- Gap
- SK바이오사이언스
- box-sizing
- c
- 백준
- grid
- stl
- 반응형 웹
- 통신사할인
- transform
- Photoshop
- 확률
- pandas
- 강화학습
Archives
- Today
- Total
sliver__
CSRF(Cross-Site Request Forgery) Attack 본문
728x90
CSRF Attack?
- User의 Cookie를 사용하여 정보를 변경하거나 탈취
- PUT, POST, DELETE Method를 비공개 API로 제공하여 민감한 정보를 얻을 수 있는 경우 공격
- 예를 들어, 유저가 A domain에 접속하기 위해 로그인
- A 서버는 Cookie값을 유저의 browser에 전달하고, A 서버 내에서 User의 쿠키 값을 저장
- 이 후, 유저가 스팸 링크를 타고 들어갔는데 해당 링크는 임베디드 form이 동작하도록 설정되어있고 A domain에 post method를 전송하도록 되어있음
- 유저의 브라우저의 쿠기 값이 헤더에 추가되고 post method로 A 서버에 API 호출
- 메소드 실행 완료
CSRF 방어
- Cookie의 JESSSIONID + CSRF 토큰 조합 사용
- 프론트 <-> 백 사이에 인증을 위해 CSRF 토큰을 추가하고 Cookie + (Request Header 또는 Payload)에 CSRF token 값을 넣어 인증을 진행한다..
- 예를 들어, 유저가 로그인을 한 경우 JESSIONID와 CSRF 토큰을 생성하여 브라우저로 넘긴다.
- 이 후, 임베디드 form이 수행되는데 403 에러가 나온다.
- 이유는 같은 domain에서는 javascript 코드가 동작하면서 CSRF 값을 가져오는게 가능하다. 하지만 해커입장에서는 다른 domain에서 form method를 수행하고, 이는 다른 domain에서 공격하려는 domain의 CSRF 토큰 값을 읽어올 수 없기 때문이다.
csrfToken을 생성하기 위한 handler를 등록하고, csrfTokenRepository의 genereateToken 함수를 사용하여 토큰을 생성한다.
유저가 로그인 작업을 수행 시 csrfToken을 생성한다.
POST method API를 호출할 때 헤더에 CSRF token이 없으면 403 에러가 발생한다.
헤더에 X-XSRF-TOKEN을 추가하고 다시 수행하면 정상 응답이 오는 것을 확인할 수 있다.
OPEN API라 CSRF token이 필요없는 경우는?
아래와 같이 ignoringRequestMatchers 함수에 CSRF 인증이 필요없는 API를 추가한다.
728x90
'Backend > Spring Security' 카테고리의 다른 글
[Spring security] Authorization 구현 (0) | 2025.01.27 |
---|---|
[Spring Security] Authentication VS Authorization (0) | 2025.01.27 |
CORS (Cross Origin Resource Sharing) (0) | 2025.01.26 |
Spring security (5) (0) | 2025.01.19 |
Spring security (4) (0) | 2025.01.18 |
Comments