«   2026/02   »
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
Recent Posts
Recent Comments
관리 메뉴

_z_z_

CSRF가 필요한 이유와 그 외 주요 웹 보안 이슈들 본문

쪼드잇/찌끄린페이퍼

CSRF가 필요한 이유와 그 외 주요 웹 보안 이슈들

hyohyo_zz 2025. 9. 1. 02:06

1. CSRF?

Cross-Site Request Forgery ( 사이트 간 요청 위조)
→ 사용자가 의도하지 않은 요청을 이미 로그인된 상태를 이용해 서버에 보내는 공격
→ 이미 로그인된 세션을 악용해서 서버에 원치 않는 요청을 보내는 공격


 

예시 상황

  1. 쪼쪼가 은행 웹사이트 A에 로그인한 상태 (세션 쿠키 보관 중)
  2. 동시에 공격자가 만든 악성 사이트 B를 방문
  3. 사이트 B안에는 몰래 이런 코드가 들어있음
    <img src="http://bank.com/transfer?to=attacker&amount=1000000">
    
    ?to=attacker&amount=1000000
    to=attacker: 돈 받을 사람 (공격자 계정)
    amount=1000000: 송금할 금액 (100만 원)
    
    
    은행 사이트(bank.com)의 /transfer 기능을 호출해서
    받는 사람(attacker)에게 1000000원을 송금하라
    
    겉으로는 이미지 태그지만, 
    사실은 브라우저의 자동 요청 특성을 이용해서 은행 송금 API를 몰래 호출하는 코드
  4. 브라우저는 <img> 요청을 보고 자동으로 bank.com에 요청을 전송하고,
  5. 이때 세션 쿠키(JSESSIONID)도 자동으로 따라감
  6. 본래 은행 서버 입장에선
    • 요청 받았더니, 유효한 세션 쿠키가 있음 → 쪼쪼가 보낸 요청으로 인식하고 처리

그래서 CSRF 방어가 필요하다

서버는 요청이 진짜 사용자가 보낸건지, 다른 사이트에서 위조한 요청인 건지 구분할 수 있어야함
→ 그 역할을 하는게 CSRF 토큰
매 요청마다 다르게 발급되므로, 공격자가 예측하기 어려움

  • 서버가 랜덤 토큰을 생성해서 폼/헤더에 심어놓고
  • 요청이 들어오면 토큰 값을 검증
  • 공격자가 만든 사이트에서는 이 토큰을 알 수 없으므로 요청 위조 실패

세션 기반 인증(JSESSIONID 쿠키 사용)을 한다면

반드시 필요하다
브라우저가 자동으로 쿠키를 붙이기 때문에, 공격자가 위조 요청을 쉽게 보낼 수 있다

JWT 같은 토큰을 Authorization헤더에 담아 보내는 방식이라면

상대적으로 CSRF 위험이 적다
브라우저가 자동으로 헤더를 붙이지 않기 때문에

  • 세션인증 → CSRF 필수
  • 토큰 인증 (Bearer JWT) → CSRF에 강하지만, XSS에 취약해서 토큰 보관 위치(localStorage 등)에 주의

CSRF 외의 주요 웹 보안 이슈들

1) XSS (Cross-Site Scripting)

  • 공격자가 악성 스크립트를 웹페이지에 삽입해 실행시키는 공격
  • 사용자의 세션 쿠키 탈취, 피싱, 악성 요청 유도 가능
  • 대응 방법
    • 입력값 검증 & 필터링 (HTML escape 처리)
    • CSP(Content Security Policy) 적용
    • HttpOnly 쿠키 사용 (JS에서 쿠키 접근 차단)

2) SQL Injection

  • 사용자가 입력한 값이 SQl 쿼리에 그대로 삽입되어 DB가 조작되는 공격
  • 인증 우회, 데이터 유출 가능
  • 대응 방법
    • PreparedStatement, ORM (JPA, QueryDSL) 활용
    • 입력 값 검증

3) Session Fixation

  • 공격자가 특정 세션 ID를 미리 생성해두고, 사용자가 로그인할 때 그 세션 ID를 쓰도록 유도하는 공격
  • 대응 방법
    • 로그인 시 세션을 새로 발급 (Spring Security에서 자동 지원(
    • Secure, HttpOnly 속성 쿠키 사용

4) Clickjacking

  • 보이는 버튼 위에 투명한 악성 프레임을 씌워서 사용자가 클릭하게 유도하는 공격
  • 좋아요 누른 줄 알았는데 실제로는 송금하기 버튼 누륨
  • 대응 방법
    • X-Frame-Options: DENY 헤더 설정
    • CSP frame-ancestors 정책 적용