일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- docker
- 누적합
- BFS
- AWS
- 트랜잭샨
- spring event
- 객체지향패러다임
- 카카오
- 코드 계약
- 결제서비스
- 수신자 대상 다르게
- piplining
- 좋은 코드 나쁜 코드
- 구현
- 이분탐색
- 레디스 동시성
- 알람 시스템
- 숫자 블록
- 프로그래머스
- 백준
- 셀러리
- 완전탐색
- branch 전략
- 디버깅
- prg 패턴
- jwt 표준
- 검색어 추천
- gRPC
- 깊게 생각해보기
- 쿠키
- Today
- Total
코딩관계론
CSRF verification failed. Request aborted는 왜 발생할까? 본문
소개
웹 애플리케이션 보안 취약점 중 하나인 CSRF 오류는 인증된 사용자가 의도하지 않은 요청을 악의적인 공격자가 대신 보내는 경우 발생합니다. 이 기술 블로그에서는 CSRF 오류에 대한 개념과 원리, 발생 상황에 대한 예시 등에 대해 다루고, CSRF 오류를 예방하기 위한 방법들을 제시합니다.
CSRF 오류의 원인
CSRF 오류가 발생하는 이유 중 하나는 HTTP의 Stateless 특성입니다. HTTP는 클라이언트와 서버 간의 연결을 유지하지 않는 Stateless한 프로토콜이기 때문에, 요청을 보낼 때마다 새로운 연결이 이루어지게 됩니다. 이러한 특성으로 인해, 서버는 요청이 유효한지 검증하기 위해 각 요청에 대한 검증 토큰을 발급합니다. 하지만, 이 토큰이 없는 상황에서 요청을 보내는 공격자가 인증된 사용자의 브라우저를 통해 요청을 보낸다면, 서버는 해당 요청을 유효하다고 판단하게 됩니다.
예를 들어, 사용자가 로그인한 상태에서 은행 계좌 이체를 요청하는 경우, 서버는 해당 요청이 유효한지 검증하기 위해 요청에 대한 검증 토큰을 발급합니다. 그러나, 이 검증 토큰을 요청에 포함시키지 않은 상태에서 공격자가 인증된 사용자의 브라우저를 이용하여 은행 계좌 이체 요청을 보내면, 서버는 해당 요청을 유효하다고 판단하게 됩니다. 이는 곧 공격자가 인증된 사용자의 계좌에서 돈을 이체할 수 있다는 것을 의미합니다.
또한, 세션과 쿠키도 CSRF 오류와 관련이 있습니다. 보통 웹 애플리케이션에서 인증된 사용자 정보는 세션에 저장되며, 세션 ID는 쿠키에 저장됩니다. 공격자는 인증된 사용자의 브라우저를 이용하여 쿠키를 탈취할 수 있고, 이를 이용하여 세션 ID를 획득하여 자신이 만든 요청에 함께 실어서 보낼 수 있습니다
CSRF 오류의 예방 방법
CSRF 토큰을 이용한 방어 방법은 가장 일반적으로 사용되는 방법입니다. 이 방법은 서버에서 요청에 대한 검증 토큰을 발급하여, 해당 토큰이 요청과 함께 전송되었을 때만 해당 요청을 처리하는 방식입니다. 이를 위해 서버에서는 모든 폼과 AJAX 요청에 대한 CSRF 토큰을 생성하고, 이를 클라이언트에게 전송합니다. 클라이언트는 해당 토큰을 쿠키나 폼 등에 포함시켜 요청을 보내게 되며, 서버는 요청이 유효한지 검증합니다
또한, SameSite쿠키 속성을 이용한 방어 방법도 있습니다. SameSite 쿠키 속성을 사용하면, 쿠키가 같은 사이트에서만 사용되도록 제한할 수 있습니다. 이를 이용하여 공격자가 탈취한 쿠키가 다른 도메인에서 사용되는 것을 막을 수 있습니다.
또한, Referer 검증이나 더블 서브밋 쿠키 패턴 등의 방법도 있습니다. Referer 검증은 요청이 발생한 페이지의 출처가 같은지 검증하여 CSRF 공격을 막는 방법입니다. 더블 서브밋 쿠키 패턴은 CSRF 공격을 막기 위해 폼과 함께 쿠키 값을 전송하는 방식으로, 서버는 폼에서 전송된 쿠키 값과 쿠키에 저장된 값이 일치하는지 검증하여 CSRF 공격을 막는 방식입니다.
결론
CSRF 오류는 웹 애플리케이션에서 중요한 보안 취약점 중 하나입니다. 이를 예방하기 위해서는 CSRF 토큰을 이용한 방어, SameSite 쿠키 속성을 이용한 방어, Referer 검증, 더블 서브밋 쿠키 패턴 등의 방어 방법을 사용할 수 있습니다. 웹 개발자는 이러한 방어 방법들을 이해하고 적용하여, 보안 취약점을 예방하는데 최선을 다해야 합니다.
'TroubleShooting' 카테고리의 다른 글
telegram.error.NetworkErrorAsyncIO Event Loop Closed 오류 (0) | 2023.08.12 |
---|---|
Email attachment received as 'noname' 해결하기 (0) | 2023.05.09 |
OAuth2.0이란 (0) | 2023.04.15 |
테스트 커버리지를 올리기 위한 노력 (0) | 2023.04.14 |
[Docker] ros:melodic을 python3.7버전으로 업그레이드(도커 파일 있음) (0) | 2022.10.29 |