크로스 사이트 스크립팅(XSS) 완벽 가이드

웹 서비스의 규모가 커질수록 보안 취약점은 더욱 치명적인 결과를 초래합니다. 그중에서도 **크로스 사이트 스크립팅(XSS)**은 수년째 OWASP(국제 웹 보안 표준 기구) TOP 10에 이름을 올릴 만큼 빈번하고 위험한 공격 방식입니다. 내 서비스의 사용자 정보를 보호하고 신뢰도를 유지하기 위해, XSS의 정체와 대응법을 반드시 이해해야 합니다.

목차

  1. 크로스 사이트 스크립팅(XSS)의 정의

  2. XSS의 3가지 주요 공격 유형

  3. XSS 공격으로 인한 주요 피해

  4. 개발자가 반드시 알아야 할 방어 전략

  5. 요약 및 결론


1. 크로스 사이트 스크립팅(XSS)의 정의

**크로스 사이트 스크립팅(Cross-Site Scripting, XSS)**이란 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 악성 스크립트를 삽입하여, 해당 웹 사이트를 열람하는 다른 사용자의 브라우저에서 그 스크립트가 실행되게 만드는 공격 기법입니다.

  • 핵심 원리: 웹 애플리케이션이 사용자로부터 입력받은 값을 적절한 검증 없이 그대로 브라우저에 출력할 때 발생합니다.

  • 용어 풀이: 이름에 ‘S’가 아닌 ‘X’를 쓰는 이유는 스타일 시트인 CSS와 혼동을 피하기 위함입니다.


2. XSS의 3가지 주요 공격 유형

XSS는 스크립트가 전달되고 실행되는 방식에 따라 크게 세 가지로 분류됩니다.

① 저장형 XSS (Stored XSS)

악성 스크립트가 대상 서버의 **데이터베이스(DB)**에 영구적으로 저장되는 방식입니다.

  • 경로: 게시판 댓글, 방명록, 프로필 정보 등.

  • 위험성: 해당 게시물을 읽는 모든 사용자가 자동으로 공격 대상이 되므로 전파력이 가장 강력합니다.

② 반사형 XSS (Reflected XSS)

사용자가 입력한 값이 즉시 브라우저로 ‘반사’되어 돌아오는 취약점을 이용합니다.

  • 경로: 검색어 입력창, URL 파라미터 등.

  • 방식: 공격자가 악성 스크립트가 포함된 URL을 사용자에게 클릭하도록 유도(이메일, 피싱 등)하여 실행시킵니다.

③ DOM 기반 XSS (DOM-based XSS)

서버를 거치지 않고 브라우저 측에서 자바스크립트를 통해 **DOM(문서 객체 모델)**을 조작할 때 발생합니다.

  • 특징: 서버 로그에 흔적이 남지 않아 탐지가 어렵고, 최근 프론트엔드 프레임워크 사용이 늘어남에 따라 주의가 필요합니다.


3. XSS 공격으로 인한 주요 피해

공격자가 XSS를 성공시키면 사용자의 브라우저 권한을 사실상 탈취하게 됩니다.

  • 세션 하이재킹(Session Hijacking): 사용자의 쿠키(Cookie) 정보를 탈취하여 로그인 세션을 가로챕니다.

  • 개인정보 유출: 폼 데이터를 가로채 아이디, 비밀번호, 신용카드 정보 등을 빼냅니다.

  • 악성 코드 유포: 사용자를 악성 소프트웨어 다운로드 페이지로 강제 리다이렉트시킵니다.

  • 페이지 변조: 웹사이트의 내용을 임의로 수정하여 기업 이미지를 실추시킵니다.


4. 개발자가 반드시 알아야 할 방어 전략

보안은 ‘입력값은 믿지 말고, 출력값은 거른다’는 원칙에서 시작합니다.

  • 출력값 이스케이핑 (HTML Escaping): * <, >, & 등 HTML 특수 문자를 &lt;, &gt;와 같은 엔티티 코드로 변환합니다. 브라우저는 이를 코드가 아닌 단순 문자로 인식합니다.

  • 입력값 검증 (Input Validation): * 서버 측에서 허용된 형식(예: 숫자만, 정해진 문자열만)인지 화이트리스트 방식으로 검증합니다.

  • CSP(Content Security Policy) 설정: * 웹 페이지에서 실행 가능한 스크립트의 출처를 제한하는 보안 헤더를 설정하여 승인되지 않은 스크립트 실행을 차단합니다.

  • HttpOnly 쿠키 사용: * 쿠키 설정 시 HttpOnly 옵션을 부여하면 자바스크립트로 쿠키에 접근할 수 없게 되어 세션 탈취를 방지할 수 있습니다.


5. 결론: 요약 및 제언

크로스 사이트 스크립팅(XSS) 완벽 가이드

XSS는 오래된 공격 방식임에도 불구하고 여전히 웹 보안의 가장 큰 위협 중 하나입니다.

  1. 정의: 사용자의 입력값을 통해 브라우저에서 악성 코드를 실행시키는 공격입니다.

  2. 유형: DB에 저장되는 Stored, URL을 통하는 Reflected, 브라우저 내에서 발생하는 DOM 방식이 있습니다.

  3. 방어: HTML 이스케이핑, CSP 설정, HttpOnly 쿠키 적용이 가장 효과적인 방어 수단입니다.

[함께 읽어볼 만한 주제]

  • CSRF(Cross-Site Request Forgery) 공격과 XSS의 차이점

  • 최신 보안 트렌드: Zero Trust 보안 모델의 이해

  • OWASP TOP 10으로 보는 웹 애플리케이션 보안 가이드


전문가 코멘트: 보안은 단 한 번의 설정으로 끝나는 것이 아니라 지속적인 모니터링과 업데이트가 필수입니다. 이 글이 여러분의 안전한 웹 환경 구축에 도움이 되길 바랍니다.