XSS와 CSRF
1. 개요
XSS(Cross-Site Scripting)와 CSRF(Cross-Site Request Forgery)는 웹 애플리케이션에서 가장 흔하고 위험한 보안 취약점이다. 두 공격 모두 사용자의 브라우저를 이용해 공격을 수행하지만, XSS는 클라이언트 측 스크립트(주로 JavaScript)를 삽입하여 사용자의 세션을 탈취하는 반면, CSRF는 사용자의 인증된 세션을 도용하여 서버에 원치 않는 요청을 강제로 실행시킨다.
2. XSS (Cross-Site Scripting)
XSS는 공격자가 악의적인 스크립트를 웹사이트에 삽입하여, 해당 사이트에 접속한 다른 사용자들의 브라우저에서 스크립트가 실행되도록 유도하는 공격이다.
- 공격 원리: 서버가 사용자의 입력값을 제대로 검증(Validation)하거나 무해화(Sanitization)하지 못할 때 발생한다. 공격 스크립트는 피해자의 브라우저에서 실행되어 피해자의 세션 쿠키, 개인 정보 등을 탈취하거나 브라우저를 조작한다.
- 주요 유형:
| 유형 | 설명 |
| 저장형 XSS (Stored XSS) | 악성 스크립트가 웹 서버의 데이터베이스(DB)나 파일에 영구적으로 저장 (예: 게시판 글). 사용자가 해당 콘텐츠를 조회할 때마다 스크립트가 실행 |
| 반사형 XSS (Reflected XSS) | 악성 스크립트가 URL 매개변수 등에 포함되어 서버에 전달된 후, 서버가 이 스크립트를 포함한 HTML을 사용자에게 "반사"하여 전송 (예: 검색 결과 페이지) |
| DOM 기반 XSS (DOM-based XSS) | 서버를 거치지 않고, 브라우저의 DOM(문서 객체 모델) 환경에서 스크립트가 실행 |
- 대응 방안:
- 입력값 검증: 모든 사용자 입력에 대해 길이, 형식 등을 엄격하게 검증.
- 출력 인코딩(Output Encoding): 사용자 입력이 HTML 태그로 해석되지 않도록 < > & 등의 특수 문자를 HTML 엔티티(예: < > &)로 변환하여 출력.
3. CSRF (Cross-Site Request Forgery)
CSRF는 사용자가 이미 웹사이트에 로그인되어 있는 상태(인증된 세션)를 이용해, 공격자가 사용자의 의지와 무관하게 서버에 특정 요청(Request)을 강제로 보내도록 유도하는 공격이다.
- 공격 원리: 웹 브라우저는 요청을 보낼 때 해당 도메인의 세션 쿠키를 자동으로 포함하는데, 공격자는 피해자가 로그인된 상태에서 악의적인 요청(예: 비밀번호 변경, 자금 이체)이 담긴 링크나 이미지를 클릭하도록 유도한다. 서버는 쿠키를 통해 요청이 인증된 사용자로부터 왔다고 판단하고 실행한다.
- 주요 조건:
- 피해자가 공격 대상 웹사이트에 로그인되어 있다.
- 공격 요청이 HTTP GET 또는 POST 방식 (자동 요청 방식)이어야 한다.
- 공격 유형 별 대응 방안
| CSRF 공격 유형 | 대응방안 |
| CSRF 토큰(CSRF Token) | 서버에서 예측 불가능한 난수 토큰을 생성하여 사용자의 세션에 저장하고, 모든 요청 시 토큰을 포함시켜 서버에서 검증합니다. 토큰이 일치하지 않으면 요청을 거부 |
| SameSite 쿠키 속성 | 쿠키가 동일 사이트 요청에만 첨부되도록 설정 |
| Referer 검증 | 요청이 신뢰할 수 있는 도메인에서 왔는지 확인 |
| 재인증(Re-Authentication) | 비밀번호 변경이나 자금 이체 등 민감한 작업은 다시 한 번 사용자 비밀번호를 입력하도록 요구 |
4. 비교 요약
| 구분 | XSS (Cross-Site Scripting) | CSRF (Cross-Site Request Forgery) |
| 목표 | 사용자 세션 탈취 및 브라우저 조작 | 사용자 권한을 도용하여 원치 않는 요청 강제 실행 |
| 공격 수단 | 악성 클라이언트 측 스크립트(JavaScript) | 세션 쿠키가 자동으로 포함되는 강제 요청(Hidden form, Image tag) |
| 피해 위치 | 사용자 브라우저 (클라이언트) | 웹 서버 (사용자 권한의 오용) |
| 핵심 방어 | 출력 인코딩, 입력값 검증 | CSRF 토큰, SameSite 쿠키 |
5. 결론
XSS는 스크립트 실행형 공격, CSRF는 요청 위조형 공격으로 구분되며, 둘 다 사용자의 신뢰 관계를 악용하므로 입력값 검증, 세션 관리, 토큰 기반 검증 등 웹 보안 기본 원칙을 철저히 적용하는 것이 근본적인 방어책이다.
'IT Tech.' 카테고리의 다른 글
| (소프트웨어공학) Pipes and Filters 패턴 (0) | 2025.11.17 |
|---|---|
| (보안) OWASP ASVS 개요 (1) | 2025.11.17 |
| (보안) 클라우드본, 클라우드재킹 공격 (0) | 2025.11.05 |
| (AI) 허깅 페이스 (0) | 2025.11.03 |
| (보안) 양자 내성 암호 (Post-Quantum Cryptography) (0) | 2025.11.03 |