보안

CSRF(Cross-Site Request Forgery)

zinoing

1. CSRF란 무엇인가?

  • 정의: CSRF는 인증된 사용자가 원치 않는 동작을 하도록 공격자가 요청을 위조하는 기법이다.
  • 핵심: 브라우저가 사용자가 로그인한 사이트의 쿠키를 자동으로 전송한다는 점을 악용한다.
  • 결과: 사용자는 자신도 모르게 송금, 비밀번호 변경, 게시물 작성 같은 행위를 하게 된다.

2. CSRF 공격 원리

  1. 사용자가 bank.com에 로그인 → 브라우저에 세션 쿠키가 저장됨.
  2. 공격자가 조작된 페이지(evil.com)를 열도록 유도.
  3. 그 안에 " https://bank.com/transfer?to=attacker&amount=1000 "같은 요청을 숨겨둠
  4. 브라우저는 이미지 요청처럼 보이지만, 자동으로 bank.com의 세션 쿠키를 포함시킴.
  5. 서버는 정상 사용자 요청으로 인식 → 공격자 계좌로 송금 처리.

포인트: 사용자가 직접 의도하지 않았는데도, 브라우저가 쿠키를 자동 포함하면서 발생


3. 방어 방법

(1) CSRF 토큰 사용

  • 각 요청마다 서버가 난수 토큰을 발급하고, 클라이언트가 이를 함께 제출해야 요청을 인정.
  • 공격자는 토큰을 알 수 없으므로 위조 요청 차단 가능.
<input type="hidden" name="csrf_token" value="af21x39k...">

(2) SameSite 쿠키 속성

  • SameSite 속성을 Strict 또는 Lax로 설정하면, 다른 사이트에서 오는 요청에 쿠키가 전송되지 않음.
Set-Cookie: sessionid=abc123; HttpOnly; Secure; SameSite=Strict

(3) Referer / Origin 헤더 검증

  • 요청 헤더에 포함된 도메인을 확인해, 올바른 출처에서 온 요청만 허용.

(4) 사용자 재인증

  • 중요한 작업(비밀번호 변경, 송금 등)에는 비밀번호 재입력이나 OTP 확인을 요구.

'보안' 카테고리의 다른 글

XSS(Cross-Site Scripting)  (0) 2025.10.28
JWT(Json Web Token)  (0) 2025.10.28
HTTPS와 SSL인증서의 역할  (0) 2025.10.28
쿠키와 세션  (0) 2025.10.28
730만 취업준비생 이력서·자소서 해킹에 ‘탈탈’ 털렸다  (0) 2025.10.25