웹 서비스의 규모가 커질수록 보안 취약점은 더욱 치명적인 결과를 초래합니다. 그중에서도 **크로스 사이트 스크립팅(XSS)**은 수년째 OWASP(국제 웹 보안 표준 기구) TOP 10에 이름을 올릴 만큼 빈번하고 위험한 공격 방식입니다. 내 서비스의 사용자 정보를 보호하고 신뢰도를 유지하기 위해, XSS의 정체와 대응법을 반드시 이해해야 합니다.
목차
-
크로스 사이트 스크립팅(XSS)의 정의
-
XSS의 3가지 주요 공격 유형
-
XSS 공격으로 인한 주요 피해
-
개발자가 반드시 알아야 할 방어 전략
-
요약 및 결론
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 특수 문자를<,>와 같은 엔티티 코드로 변환합니다. 브라우저는 이를 코드가 아닌 단순 문자로 인식합니다. -
입력값 검증 (Input Validation): * 서버 측에서 허용된 형식(예: 숫자만, 정해진 문자열만)인지 화이트리스트 방식으로 검증합니다.
-
CSP(Content Security Policy) 설정: * 웹 페이지에서 실행 가능한 스크립트의 출처를 제한하는 보안 헤더를 설정하여 승인되지 않은 스크립트 실행을 차단합니다.
-
HttpOnly 쿠키 사용: * 쿠키 설정 시
HttpOnly옵션을 부여하면 자바스크립트로 쿠키에 접근할 수 없게 되어 세션 탈취를 방지할 수 있습니다.
5. 결론: 요약 및 제언

XSS는 오래된 공격 방식임에도 불구하고 여전히 웹 보안의 가장 큰 위협 중 하나입니다.
-
정의: 사용자의 입력값을 통해 브라우저에서 악성 코드를 실행시키는 공격입니다.
-
유형: DB에 저장되는 Stored, URL을 통하는 Reflected, 브라우저 내에서 발생하는 DOM 방식이 있습니다.
-
방어: HTML 이스케이핑, CSP 설정, HttpOnly 쿠키 적용이 가장 효과적인 방어 수단입니다.
[함께 읽어볼 만한 주제]
-
CSRF(Cross-Site Request Forgery) 공격과 XSS의 차이점
-
최신 보안 트렌드: Zero Trust 보안 모델의 이해
-
OWASP TOP 10으로 보는 웹 애플리케이션 보안 가이드
전문가 코멘트: 보안은 단 한 번의 설정으로 끝나는 것이 아니라 지속적인 모니터링과 업데이트가 필수입니다. 이 글이 여러분의 안전한 웹 환경 구축에 도움이 되길 바랍니다.