Blog
CSRF와 클릭재킹은 어떻게 사용자를 속이는가
서론#
보안 사고를 떠올리면
대부분은 “해커가 시스템을 뚫는다”는 장면을 상상한다.
하지만 CSRF와 클릭재킹은
시스템을 직접 공격하지 않는다.
이 두 공격의 공통점은 명확하다.
사용자가 직접 요청을 보내게 만든다.
그래서 더 헷갈리고,
그래서 더 자주 과소평가된다.
이 글은
CSRF와 클릭재킹이 어떤 기술을 쓰는지가 아니라,
어떤 방식으로 사용자를 속이는지를 정리한 기록이다.
CSRF란 무엇인가#
CSRF(Cross-Site Request Forgery)는
사용자가 의도하지 않은 요청을
이미 인증된 상태로 보내게 만드는 공격이다.
여기서 중요한 전제는 하나다.
- 사용자는 이미 로그인되어 있다
- 브라우저는 인증 정보를 자동으로 포함한다
공격자는 이 구조를 이용한다.
CSRF는 어떻게 발생하는가#
예를 들어, 사용자가 로그인한 상태에서
다른 사이트를 방문했다고 가정해보자.
그 사이트에 이런 코드가 있다.
<img src="https://example.com/api/delete-account" />
브라우저는 이미 로그인된 상태이기 때문에
요청에 쿠키를 자동으로 포함한다.
서버 입장에서는
“정상적인 사용자의 요청”으로 보인다.
사용자는 아무것도 클릭하지 않았고,
아무것도 입력하지 않았다.
하지만 요청은 이미 전송되었다.
CSRF의 핵심은 “자동 포함”#
CSRF의 본질은
브라우저의 편의 기능에 있다.
- 쿠키는 요청마다 자동으로 포함된다
- 서버는 요청의 출처를 구분하지 않는다
그래서 CSRF는
“인증을 우회하는 공격”이 아니다.
인증을 그대로 이용하는 공격이다.
클릭재킹이란 무엇인가#
클릭재킹(Clickjacking)은
사용자가 클릭한 대상과
실제로 클릭되는 대상이 다르도록 만드는 공격이다.
사용자는 분명 버튼을 눌렀다고 생각하지만,
실제로는 전혀 다른 요소가 눌린다.
클릭재킹은 어떻게 발생하는가#
공격자는
정상 페이지 위에 투명한 레이어를 올린다.
- 사용자가 보는 화면은 정상 UI
- 실제 클릭은 보이지 않는 요소에 전달
예를 들어:
- “동영상 재생” 버튼을 클릭했는데
- 실제로는 “결제”, “권한 승인” 버튼을 클릭
사용자는 속았다는 사실조차
즉시 인지하지 못한다.
CSRF와 클릭재킹의 공통점#
두 공격은 서로 다른 방식처럼 보이지만,
공통된 구조를 가진다.
- 사용자가 직접 행동한다
- 브라우저 기능을 악용한다
- 서버는 정상 요청으로 인식한다
그래서 이 둘은
“사용자 기반 공격”에 가깝다.
그래서 더 위험한 이유#
CSRF와 클릭재킹은
기술적으로 복잡하지 않다.
문제는
사용자 행동을 전제로 한다는 점이다.
- 로그에 남아도 정상 요청처럼 보인다
- 서버 단에서는 이상을 감지하기 어렵다
- 사용자는 피해 원인을 이해하지 못한다
그래서 방어하지 않으면
오래도록 눈에 띄지 않는다.
방어의 핵심은 “의도 검증”#
이 두 공격을 막는 핵심은
요청이나 클릭이 사용자의 의도에서 나왔는지를 검증하는 것이다.
- CSRF
- 토큰, SameSite 쿠키, Origin 검증
- 클릭재킹
- iframe 차단
정리#
CSRF와 클릭재킹은
시스템을 속이지 않는다.
대신,
사용자를 속인다.
그리고 서버는 사용자의 행동을 그대로 믿는다.
그래서 이 두 공격은
“기술 문제”라기보다
신뢰 문제에 가깝다.
관련 게시글
5개
CSP는 무엇을 막아주고, 무엇을 막아주지 않는가
Content Security Policy(CSP)가 실제로 막아주는 보안 위협과, CSP로는 해결할 수 없는 문제를 구분해 정리합니다. CSP의 역할과 한계를 책임 경계 관점에서 설명합니다.
로컬스토리지, 세션 스토리지, 쿠키를 언제, 왜 사용하는가
브라우저 저장소인 로컬스토리지, 세션 스토리지, 쿠키의 차이를 접근 주체와 제어 모델 관점에서 정리합니다. 각 저장소가 어떤 보안 이슈와 연결되는지 학습 관점에서 설명합니다.
Next.js에서 보안 헤더를 설정한다는 것의 의미와 한계
Next.js에서 설정할 수 있는 보안 헤더들의 역할과 한계를 정리합니다. 보안 헤더가 무엇을 막아주지 않는지, 프레임워크와 개발자의 책임 경계를 중심으로 설명합니다.
env는 보안인가? 많은 개발자들이 착각하는 이유
env는 보안 기능일까? 이 글에서는 env의 역할과 한계, NEXT_PUBLIC_ 환경 변수의 노출 특성, 프론트엔드에서 노출돼도 되는 값의 기준을 정리합니다.
XSS란 무엇인가: 브라우저에서 실행되는 공격
XSS(Cross-Site Scripting)는 서버가 아닌 사용자의 브라우저를 공격하는 웹 보안 취약점입니다. 이 글에서는 XSS의 개념, 발생 원인, 주요 유형과 위험성을 정리합니다.