XSS와 CSRF
security
2분 읽기XSS와 CSRF
XSS (Cross-Site Scripting)
악성 스크립트를 웹사이트에 심어서 쿠키/토큰을 읽는 공격
해결
- httpOnly 쿠키 → JS로 읽기 불가 → XSS 막힘
CSRF (Cross-Site Request Forgery)
사용자 모르게 요청을 위조하는 공격. 쿠키를 사용하는 공격
- 로그인된 상태에서 해커 링크 클릭
- 해커가 만든 페이지가 몰래 요청 보냄
- 브라우저가 쿠키 자동으로 붙여주니까 서버 입장에선 정상 요청처럼 보임
- httpOnly로는 못 막음 (JS로 읽는 게 아니라 브라우저가 자동으로 붙이는 거라)
- GET보다 POST/PUT/DELETE에서 위험 (데이터 변경이 일어나니까)
해결 방법 1 - CSRF 토큰
서버가 랜덤 토큰 발급 → 요청할 때 헤더에 담아서 전송 → 서버가 검증 해커는 토큰을 모르니까 위조 요청 못 만듦
해결 방법 2 - SameSite 쿠키
SameSite=Strict- 다른 사이트에서 쿠키 완전 차단SameSite=Lax- GET은 허용, POST/PUT/DELETE는 다른 사이트에서 차단 → 실무에서 충분한 수준SameSite=None- 모두 허용 → CSRF 취약
XSS vs CSRF
| XSS | CSRF | |
|---|---|---|
| 공격 방식 | 쿠키를 읽음 | 쿠키를 사용함 |
| 해결 | httpOnly 쿠키 | CSRF 토큰 or SameSite=Lax |