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 엔티티(예: &lt; &gt; &amp;)로 변환하여 출력.

3. CSRF (Cross-Site Request Forgery)

CSRF는 사용자가 이미 웹사이트에 로그인되어 있는 상태(인증된 세션)를 이용해, 공격자가 사용자의 의지와 무관하게 서버에 특정 요청(Request)을 강제로 보내도록 유도하는 공격이다.

  • 공격 원리: 웹 브라우저는 요청을 보낼 때 해당 도메인의 세션 쿠키를 자동으로 포함하는데, 공격자는 피해자가 로그인된 상태에서 악의적인 요청(예: 비밀번호 변경, 자금 이체)이 담긴 링크나 이미지를 클릭하도록 유도한다. 서버는 쿠키를 통해 요청이 인증된 사용자로부터 왔다고 판단하고 실행한다.
  • 주요 조건:
    1. 피해자가 공격 대상 웹사이트에 로그인되어 있다.
    2. 공격 요청이 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는 요청 위조형 공격으로 구분되며, 둘 다 사용자의 신뢰 관계를 악용하므로 입력값 검증, 세션 관리, 토큰 기반 검증 등 웹 보안 기본 원칙을 철저히 적용하는 것이 근본적인 방어책이다.

+ Recent posts