[Web] XSS와 CSRF

j-yong98·2026년 3월 3일

Web

목록 보기
2/3

XSS

XSS는 Cross-Site Scripting로 웹 페이지에 악성 스크립트를 삽입하여 다른 사용자의 브라우저에서 실행되도록 하는 공격이다. 즉, 신뢰된 웹사이트를 통해 사용자의 브라우저를 공격한다.

XSS 동작 흐름

  1. 사용자 입력값에 스크립트를 삽입
  2. 서버에서 이를 검증하지 않고 저장 혹은 응답
  3. 다른 사용자가 웹사이트를 방문
  4. 브라우저가 정상 스크립트처럼 실행

XSS 방어 방법

XSS를 방어하는 방법은 여러 가지가 있지만, 출력 시점에서의 처리를 통해 방어할 수 있다.

  1. Output Encoding

    입력값을 그대로 출력하지 않고 인코딩하여 출력하는 방법이다.

    < → &lt;
    > → &gt;
  2. HttpOnly 쿠키

    쿠키에 HttpOnly 옵션을 설정하면 JavaScript에서 쿠키에 접근할 수 없다.

    Set-Cookie: JSESSIONID=xxx; HttpOnly

    이를 통해 document.cookie 기반 세션 탈취를 막을 수 있다. HttpOnly는 XSS 자체를 막는 것이 아니라 쿠키 탈취 피해를 줄이는 보완 수단이다.

CSRF

CSRF는 Cross-Site Request Forgery로 사용자가 의도하지 않은 요청을 서버로 보내도록 하는 공격이다. 다시 말해, 사용자의 권한을 이용하는 공격이다.

CSRF 동작 흐름

  1. 사용자가 사이트에 로그인
  2. 악성 사이트로 접속 유도
  3. 악성 사이트에 접속 시 사용자 권한을 가지고 서버로 요청
  4. 서버는 정상적으로 응답

브라우저는 기본적으로 같은 도메인의 경우 쿠키를 자동으로 포함한다.

CSRF 방어 방법

  1. CSRF Token

    서버가 랜덤 토큰을 발행하고 요청 시 해당 토큰을 포함하는 방법이다.

    POST /transfer
    Cookie: JSESSIONID=xxx
    X-CSRF-TOKEN: random_token

    공격자는 이 토큰을 알 수 없어 위조 요청이 불가하다.

  2. SameSite 쿠키

    쿠키를 SameSite로 설정해 외부 사이트 요청에 대해 쿠키를 포함하지 않도록 한다.

    Set-Cookie: JSESSIONID=xxx; SameSite=Strict
  3. Origin / Refer 검증

    서버에서 요청 헤더의 Origin을 검증하여 허용된 도메인인지 확인 하는 방법이다.

정리

구분XSSCSRF
공격 대상사용자 브라우저서버
필요 조건스크립트 실행로그인 상태
목적쿠키 탈취, 세션 장악권한 악용
방어 핵심Output EncodingCSRF Token

0개의 댓글