로그인한 상태로 평소처럼 웹 서핑을 하던 중, 나도 모르게 내 SNS에 광고 글이 올라가거나 비밀번호가 변경되어 있다면 어떨까요? 이것은 단순한 해킹이 아니라 웹 애플리케이션의 취약점을 이용한 CSRF(Cross-Site Request Forgery) 공격의 전형적인 사례입니다.
목차
-
CSRF(사이트 간 요청 위조)의 정의
-
CSRF 공격이 발생하는 메커니즘
-
XSS vs CSRF: 무엇이 다른가?
-
효과적인 CSRF 방어 기법
-
요약 및 결론
1. CSRF(사이트 간 요청 위조)의 정의
**CSRF(Cross-Site Request Forgery)**는 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격입니다.
-
핵심 원리: 웹 브라우저가 특정 사이트에 요청을 보낼 때, 해당 사이트의 **쿠키(Cookie)**를 자동으로 함께 전송한다는 점을 악용합니다.
-
전제 조건: 사용자가 공격 대상 사이트에 이미 로그인되어 있어 인증 세션이 유효한 상태여야 합니다.
2. CSRF 공격이 발생하는 메커니즘
공격은 대략 다음과 같은 순서로 진행됩니다.
-
로그인: 사용자가 보안이 취약한
A 은행사이트에 로그인합니다. 브라우저에는A 은행의 세션 쿠키가 저장됩니다. -
유도: 공격자는 사용자에게 악성 스크립트가 포함된 이메일이나 게시글 링크를 클릭하도록 유도합니다.
-
위조 요청: 사용자가 링크를 클릭하는 순간, 브라우저는
A 은행서버로 “공격자의 계좌로 100만 원 송금”이라는 요청을 보냅니다. -
자동 인증: 이때 브라우저는 사용자의
A 은행쿠키를 함께 보내고, 서버는 이를 정상적인 사용자의 요청으로 착각하여 실행합니다.
3. XSS vs CSRF: 무엇이 다른가?
두 공격은 이름이 비슷하여 자주 혼동되지만, 공격의 ‘목적’과 ‘대상’에서 큰 차이가 있습니다.
| 구분 | XSS (Cross-Site Scripting) | CSRF (Cross-Site Request Forgery) |
| 공격 대상 | 사용자(브라우저) | 서버(애플리케이션) |
| 핵심 목적 | 사용자 쿠키 탈취 및 정보 탈취 | 사용자의 권한을 도용하여 특정 행위 실행 |
| 실행 위치 | 사용자의 브라우저 내에서 스크립트 실행 | 서버 측에서 요청이 실행됨 |
| 의존성 | 사이트의 스크립트 실행 취약점 필요 | 사용자의 로그인 세션(쿠키) 필요 |
4. 효과적인 CSRF 방어 기법
보안 전문가로서 권장하는 가장 강력한 방어 전략은 다음과 같습니다.
① CSRF 토큰 (CSRF Token) 사용
가장 보편적이고 확실한 방법입니다. 서버는 사용자 세션에 임의의 난수(Token)를 저장하고, 모든 상태 변경 요청(POST, PUT 등) 시 이 토큰을 함께 제출하도록 합니다. 서버는 제출된 토큰이 세션에 저장된 값과 일치하는지 확인합니다.
② SameSite 쿠키 설정
쿠키 설정 시 SameSite 속성을 추가하여 타 도메인에서의 쿠키 전송을 제한합니다.
-
Strict: 타 도메인에서의 모든 요청에 쿠키를 보내지 않음.
-
Lax: GET 요청 등 안전한 상황에서만 쿠키 전송 허용 (기본 권장값).
③ Referer 및 Origin 검증
서버 측에서 요청이 들어올 때, HTTP 헤더의 Referer나 Origin 정보를 확인하여 승인된 도메인에서 온 요청인지 검증합니다.
5. 결론: 요약 및 제언

웹 보안은 사용자의 편리함과 안전함 사이의 균형을 맞추는 일입니다.
-
정의: 사용자의 권한을 이용해 서버에 가짜 요청을 보내는 공격입니다.
-
핵심: 사용자가 로그인된 상태에서 브라우저가 쿠키를 자동 전송하는 특징을 이용합니다.
-
해결: CSRF 토큰 도입과 SameSite 쿠키 설정을 통해 대부분의 위협을 차단할 수 있습니다.
[함께 읽어볼 만한 주제]
-
현대적인 인증 방식: JWT(JSON Web Token)와 보안 이슈
-
프론트엔드 보안의 기초: Content Security Policy(CSP) 적용하기
-
안전한 API 설계를 위한 REST API 보안 체크리스트
전문가 코멘트: CSRF는 고전적인 공격이지만, 최근의 복잡한 웹 환경에서도 여전히 유효합니다. 특히 자산이나 개인정보를 다루는 서비스라면 반드시 CSRF 토큰을 적용하십시오.