크로스 사이트 스크립팅

크로스 사이트 스크립팅(XSS, Cross-Site Scripting)은 공격자가 다른 사용자의 브라우저에서 자신이 작성한 스크립트를 실행시키는 웹 보안 취약점이다. 페이지에 사용자 입력을 그대로 출력할 때 가장 많이 발생하며, 세션 탈취·피싱·키로깅 등 다양한 2차 공격으로 이어진다.

기본 흐름

  1. 공격자가 게시판, 댓글, URL 파라미터 등에 스크립트가 포함된 입력을 주입한다.
  2. 서버가 그 입력을 이스케이프 없이 페이지에 출력한다.
  3. 다른 사용자가 페이지를 열면 그 스크립트가 자신의 브라우저에서 실행된다.
  4. 공격자는 쿠키·세션·키 입력 등을 탈취하거나 강제로 동작을 수행시킨다.

종류

종류특징
Stored XSS악성 스크립트가 서버에 저장되어 다른 사용자에게 노출
Reflected XSSURL 파라미터 등으로 즉시 반사되어 실행
DOM-based XSS서버를 거치지 않고 클라이언트 측 JS가 처리하는 과정에서 발생

대응 방안

  • 출력 인코딩: HTML 컨텍스트에 맞게 <, >, & 등을 escape
  • 입력 검증: 화이트리스트 기반 필터링
  • CSP(Content Security Policy): 신뢰된 출처의 스크립트만 실행 허용
  • HttpOnly 쿠키: JS에서 세션 쿠키 접근 차단
  • 신뢰 가능한 라이브러리 사용: 템플릿 엔진의 자동 escape 활용

실수가 흔한 지점

  • innerHTML로 사용자 입력을 직접 삽입
  • URL이나 검색어를 <a href>, <img src>에 그대로 사용
  • “안전해 보이는” 마크다운 렌더러도 HTML 통과를 허용하면 위험

관련 노트

  • CSRF: 다른 종류의 대표 웹 취약점
  • SQL Injection: 입력 검증을 게을리할 때 발생하는 또 다른 공격
  • 기밀성 · 무결성: XSS가 위협하는 보안 원칙
  • 세션: XSS의 주요 탈취 대상