Learning
토픽 197 / 210·애플리케이션 보안

XSS (Cross-Site Scripting)

XSS (Cross-Site Scripting)

웹 페이지에 악성 스크립트를 삽입하여 다른 사용자의 브라우저에서 실행시키는 클라이언트 측 공격으로 쿠키 탈취, 세션 하이재킹, 피싱 등에 악용

특징: 클라이언트 측 공격(서버가 아닌 사용자 브라우저에서 실행), 쿠키/세션 탈취, 피싱 페이지 삽입

구성요소: 악성 스크립트(JavaScript), 취약한 출력 처리(인코딩 미적용), 피해자 브라우저(스크립트 실행)

기술요소: Stored XSS(저장형): DB에 저장→모든 사용자에게 실행, Reflected XSS(반사형): URL 파라미터 반영→링크 클릭 시 실행, DOM XSS(DOM 기반): 클라이언트 JavaScript가 DOM 직접 조작

유형별 동작원리 상세

  • Stored XSS(저장형): 공격자가 악성 스크립트를 게시판/댓글에 작성 → DB에 저장 → 다른 사용자가 해당 페이지 방문 시 스크립트 자동 실행, 영향 범위 가장 넓음(모든 방문자), 예:
  • Reflected XSS(반사형): 악성 스크립트가 URL 파라미터에 포함 → 서버가 파라미터를 응답에 반영 → 피해자가 링크 클릭 시 실행, 예: https://site.com/search?q=, 링크 유포 필요(피싱 메일/메신저)
  • DOM-based XSS: 서버 응답은 정상, 클라이언트 JavaScript가 DOM을 직접 조작할 때 발생, document.getElementById('output').innerHTML = location.hash.substring(1), 서버 로그에 흔적 없음(서버 미경유), WAF 탐지 어려움

CSP(Content Security Policy) 상세

  • HTTP 헤더로 브라우저에 허용된 리소스 출처 지정
  • Content-Security-Policy: default-src 'self'; script-src 'self' cdn.example.com; style-src 'self' 'unsafe-inline'
  • script-src 'self': 같은 도메인 스크립트만 허용, 인라인 스크립트 차단
  • script-src 'nonce-랜덤값': nonce 매칭 스크립트만 실행 허용
  • report-uri /csp-report: CSP 위반 시 보고 전송(모니터링)

대응: 출력 인코딩(HTML Entity Encoding/근본 대책), CSP(Content Security Policy): 스크립트 출처 제한, HTTPOnly 쿠키: JS 접근 차단, 입력 검증(보조)

적용사례: 게시판, 댓글, 검색 결과, URL 파라미터

비교: Stored XSS(DB 저장/지속적/영향 범위 넓음) vs Reflected XSS(URL 반영/일회성/링크 유포 필요) vs DOM XSS(클라이언트 측/서버 미경유)

연관: OWASP Top 10, WAF, CSP, 시큐어 코딩