XSS 테스트 구문 모음 완벽 가이드
크로스 사이트 스크립팅(Cross-Site Scripting, XSS)은 웹 애플리케이션에서 가장 흔하게 발견되는 보안 취약점 중 하나입니다. OWASP Top 10에 지속적으로 포함되어 있으며, 공격자가 다른 사용자의 브라우저에서 악성 스크립트를 실행할 수 있게 하는 인젝션 공격의 한 유형입니다. XSS 공격은 세션 하이재킹, 계정 탈취, 페이지 변조, 악성코드 배포, 피싱 공격 등 다양한 위협으로 이어질 수 있어 웹 개발자와 보안 전문가가 반드시 이해하고 대응해야 하는 영역입니다.
본 도구는 웹 보안 교육 및 자체 시스템 보안 점검을 위해 다양한 XSS 테스트 패턴을 카테고리별로 정리하여 제공합니다. 기본적인 스크립트 태그 삽입부터 이벤트 핸들러 활용, 다양한 인코딩 우회 기법, DOM 기반 XSS, SVG/MathML 벡터, CSS 인젝션, 필터 우회 기법, 고급 쿠키 탈취 및 키로거 시뮬레이션까지 총 8개 카테고리로 분류되어 있습니다.
XSS의 세 가지 주요 유형
Reflected XSS(반사형): 사용자가 제공한 입력값이 서버의 응답에 즉시 반영되는 형태입니다. URL 파라미터나 폼 데이터를 통해 전달된 악성 스크립트가 서버에서 적절한 검증 없이 HTML 응답에 포함될 때 발생합니다. 주로 피싱 이메일이나 악성 링크를 통해 공격이 이루어집니다.
Stored XSS(저장형): 악성 스크립트가 서버의 데이터베이스에 영구적으로 저장되어, 해당 데이터를 조회하는 모든 사용자에게 영향을 미치는 가장 위험한 유형입니다. 게시판, 댓글, 프로필 정보 등에서 주로 발생하며, 한 번의 공격으로 다수의 사용자를 대상으로 할 수 있습니다.
DOM-based XSS(DOM 기반): 서버 측이 아닌 클라이언트 측 JavaScript 코드의 취약점을 이용하는 유형입니다. document.location, document.URL, document.referrer, window.name 등의 DOM 속성이 적절한 검증 없이 innerHTML이나 document.write() 등에 사용될 때 발생합니다.
효과적인 XSS 방어 전략
- 입력 검증(Input Validation): 화이트리스트 기반으로 허용 가능한 입력만 수락
- 출력 인코딩(Output Encoding): 컨텍스트에 맞는 이스케이핑 적용 (HTML, JavaScript, URL, CSS)
- Content Security Policy(CSP): HTTP 헤더를 통해 스크립트 실행 소스 제한
- HttpOnly 쿠키: JavaScript에서 쿠키 접근 차단
- DOMPurify 라이브러리: 클라이언트 측 HTML 정화 처리
- X-XSS-Protection 헤더: 브라우저 내장 XSS 필터 활성화
자주 묻는 질문 (FAQ)
Q. 이 도구의 XSS 패턴을 아무 사이트에 사용해도 되나요?
A. 절대 아닙니다. 본 도구는 교육 목적 및 자신이 소유하거나 명시적 허가를 받은 시스템의 보안 점검에만 사용해야 합니다. 허가 없이 타인의 웹사이트에 XSS 공격을 시도하는 것은 정보통신망법 위반으로 형사 처벌 대상입니다.
Q. XSS 취약점을 발견하면 어떻게 해야 하나요?
A. 자체 시스템에서 발견한 경우 즉시 패치를 적용해야 합니다. 타사 시스템에서 발견한 경우 해당 서비스의 보안 담당자에게 책임감 있는 공개(Responsible Disclosure) 절차에 따라 보고하세요. 많은 서비스가 버그 바운티 프로그램을 운영하고 있습니다.
Q. CSP(Content Security Policy)만 설정하면 XSS를 완전히 차단할 수 있나요?
A. CSP는 강력한 방어 수단이지만 단독으로 완벽한 보호를 보장하지 않습니다. 입력 검증, 출력 인코딩, HttpOnly 쿠키 등 다층 방어(Defense in Depth) 전략을 함께 적용해야 합니다. 또한 CSP 설정이 너무 느슨하면 우회될 수 있으므로 최소 권한 원칙에 따라 엄격하게 설정해야 합니다.
Q. React나 Vue 같은 모던 프레임워크를 사용하면 XSS에 안전한가요?
A. React, Vue, Angular 등의 프레임워크는 기본적으로 출력 인코딩을 수행하여 XSS를 상당 부분 방지합니다. 하지만 dangerouslySetInnerHTML(React)이나 v-html(Vue) 같은 Raw HTML 삽입 기능을 사용하면 여전히 취약할 수 있습니다. 프레임워크의 보안 기능을 우회하는 코드 패턴에 주의해야 합니다.
Q. WAF(Web Application Firewall)가 있으면 XSS를 다 막아주나요?
A. WAF는 알려진 패턴의 XSS 공격을 차단하는 데 도움이 되지만, 새로운 우회 기법이나 인코딩 변환을 통한 공격은 탐지하지 못할 수 있습니다. WAF는 보조적인 방어 수단으로 활용하고, 근본적인 보안 코딩 관행을 함께 적용해야 합니다.