사이트 간 요청 위조(cross-site request forgery)
이번에는 사이트 간 요청 위조(Cross-Site Request Forgery, 이하 CSRF)에 대해서 알아보겠습니다. CSRF는 웹 보안에서 중요한 이슈다.
CSRF란?
CSRF는 흔히 브라우저에서 흔히 볼 수 있는 악성 웹사이트가 사용자의 인증 정보를 도용하여 다른 웹사이트로 요청을 보내는 공격 유형입니다.
예를 들어, 사용자가 자신의 은행 계좌를 관리하는 웹사이트 A와 쇼핑을 하는 웹사이트 B가 있다고 가정합니다. 사용자가 웹사이트 A에서 로그인한 상태에서 웹사이트 A에서는 잔액조회, 입금, 출금 등을 할 수 있는 요청을 보낼 수 있는 기능을 가졌습니다. 이때, 웹사이트 B에서 악적으로 웹사이트 A에 요청을 보내면서 사용자의 계정 정보를 가로챈다면 웹사이트 A에서는 악성 요청을 받아들이고 이로 인해 사용자의 계정 정보가 유출될 수 있는 것입니다.
CSRF 공격 탐지 방법
CSRF 공격을 탐지하는 가장 좋은 방법은 사용자와 요청을 보내는 웹사이트 간에 인증 토큰을 설정하는 것입니다. 이후, 요청을 보낼 때 CSRF 토큰 값이 함께 전송되고 이를 검증하여 올바른 요청인지 판별하는 방식입니다. 토큰 값을 관리하기 위해 세션 변수를 사용할 수 있습니다.
CSRF 예방
-
HTTP 메시지 헤더의 Referer 값 검증
Referer 값 검증은 HTTP 메시지 헤더 중 Referer 값이 유효한지 검사하는 방법입니다. 이를 통해 공격자가 만든 페이지에서 발생하는 요청을 차단할 수 있습니다. -
CSRF 토큰 사용
CSRF 토큰 사용은 위에서 언급한 것과 같이 사용자와 요청을 보내는 웹사이트 간에 인증 토큰을 설정하여 요청이 올바른지 판별하는 방식입니다. -
SameSite 쿠키 설정
SameSite 쿠키 설정은 쿠키를 클라이언트 측에서 발급할 때 SameSite 옵션의 값을 설정하여 CSRF 공격을 막는 방식입니다.
결론
CSRF는 악성 웹사이트로부터 사용자의 계정 정보를 도용하는 대표적인 공격 유형입니다. 따라서, CSRF 공격 예방하기 위해서는 다양한 방법을 사용하여 프로그래머스에서 확인할 수 있습니다. 이를 통해 보안 유지를 철저히 하여 불필요한 피해를 최소화하는 것이 중요합니다.