_z_z_
CSRF가 필요한 이유와 그 외 주요 웹 보안 이슈들 본문
1. CSRF?
Cross-Site Request Forgery ( 사이트 간 요청 위조)
→ 사용자가 의도하지 않은 요청을 이미 로그인된 상태를 이용해 서버에 보내는 공격
→ 이미 로그인된 세션을 악용해서 서버에 원치 않는 요청을 보내는 공격
예시 상황
- 쪼쪼가 은행 웹사이트 A에 로그인한 상태 (세션 쿠키 보관 중)
- 동시에 공격자가 만든 악성 사이트 B를 방문
- 사이트 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를 몰래 호출하는 코드 - 브라우저는 <img> 요청을 보고 자동으로 bank.com에 요청을 전송하고,
- 이때 세션 쿠키(JSESSIONID)도 자동으로 따라감
- 본래 은행 서버 입장에선
- 요청 받았더니, 유효한 세션 쿠키가 있음 → 쪼쪼가 보낸 요청으로 인식하고 처리
그래서 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 정책 적용
'쪼드잇 > 찌끄린페이퍼' 카테고리의 다른 글
| 코드잇_스프린트_SB3기. 중급프로젝트 후기(고봉) (10) | 2025.09.18 |
|---|