토픽 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, 시큐어 코딩