XSS

Security

개요

XSS(Cross-Site Scripting)는 공격자가 웹 페이지에 악성 자바스크립트를 주입해, 피해자의 브라우저에서 그 사이트의 권한으로 실행되게 만드는 취약점입니다.

주입된 스크립트는 해당 오리진의 권한을 그대로 가지므로, 쿠키·세션 탈취, DOM 조작, 사용자 대신 요청 발사 등 사실상 무엇이든 할 수 있습니다.

자세히

유형은 크게 셋입니다. (1) 저장형(Stored): 악성 스크립트가 서버 DB에 저장돼(예: 댓글) 다른 사용자에게 반복 노출 — 가장 위험. (2) 반사형(Reflected): URL 파라미터 등 요청 값이 응답에 그대로 반사돼 실행. (3) DOM 기반: 서버를 거치지 않고 클라이언트 자바스크립트가 신뢰할 수 없는 입력을 위험한 싱크(`innerHTML`, `eval`)에 넣어 발생. 공통 원인은 '신뢰할 수 없는 입력을 이스케이프 없이 HTML/JS 실행 맥락에 삽입'하는 것입니다.

방어의 핵심은 출력 인코딩입니다 — 데이터를 HTML·속성·JS·URL 맥락에 맞게 이스케이프하고, `innerHTML` 대신 `textContent`를 쓰거나 검증된 새니타이저(DOMPurify)를 사용합니다. 심층 방어로 CSP(Content-Security-Policy)로 인라인 스크립트·외부 스크립트 출처를 제한하고, 세션 쿠키에 `HttpOnly`를 걸어 스크립트가 쿠키를 못 읽게 하며, 업로드 콘텐츠에는 정확한 MIME 타입과 `nosniff`를 적용합니다. XSS는 동일 출처 정책·CSRF 방어를 안쪽에서 무너뜨릴 수 있는 근본 취약점이라, 웹 보안에서 최우선으로 막아야 합니다.

관련 타입