보안

XSS(Cross-Site Scripting)

zinoing

웹 애플리케이션 보안 취약점 중 XSS(Cross-Site Scripting) 는 OWASP Top 10에도 꾸준히 등장하는 대표적인 공격이다.
XSS는 공격자가 웹 페이지에 악성 스크립트를 삽입하여, 다른 사용자의 브라우저에서 실행되도록 유도하는 공격 기법이다.
이번 글에서는 XSS의 개념, 공격 방식, 예시, 그리고 방어 방법을 살펴보겠다.


1. XSS란 무엇인가?

  • 정의: 공격자가 웹 애플리케이션에 악성 자바스크립트를 삽입해, 사용자의 브라우저에서 실행되게 만드는 공격.
  • 위험성:
    • 쿠키/세션 탈취
    • 피싱(가짜 입력창)
    • 악성 행위 자동 수행(예: 게시글 자동 등록, 계정 변경)

2. XSS 공격 방식

XSS는 크게 세 가지 유형으로 구분된다.

  1. 저장형(Persistent XSS)
    • 악성 스크립트가 서버 DB에 저장 → 이후 페이지를 보는 모든 사용자의 브라우저에서 실행.
    • 예: 게시판 댓글에 "<script>alert("Hacked")</script>" 저장 → 해당 게시글을 보는 사람마다 스크립트 실행.
  2. 반사형(Reflected XSS)
    • 공격자가 조작한 URL을 통해 악성 스크립트가 바로 응답에 반영.
    • 예: 검색 페이지에 입력한 값을 그대로 출력할 때 발생.
  3. DOM 기반(DOM-based XSS)
    • 서버 응답이 아니라 브라우저에서 실행되는 JS 코드(DOM 조작)가 직접 취약
    • 예: 클라이언트 스크립트가 location.hash 같은 값 그대로 innerHTML에 삽입.

3. XSS 방어 방법

  1. 출력 인코딩(Escaping)
    • HTML, JavaScript, URL, CSS 등 맥락에 맞게 인코딩.
    • 예: < → &lt;, > → &gt;.
  2. 입력 검증(Input Validation)
    • 허용된 값(화이트리스트)만 통과.
    • 예: 숫자만 입력 가능한 필드는 숫자만 허용.
  3. HttpOnly 쿠키
    • 자바스크립트에서 쿠키 접근 차단 → 세션 탈취 방어.
    • Set-Cookie: sessionid=abc123; HttpOnly; Secure.
  4. Content Security Policy (CSP)
    • 브라우저가 허용된 리소스만 실행하도록 제한.
    • 예: 외부 스크립트 차단, 인라인 스크립트 금지.
  5. 보안 프레임워크 사용
    • React, Angular 같은 프레임워크는 기본적으로 HTML 이스케이프 처리.

'보안' 카테고리의 다른 글

SQL Injection(SQLi)  (0) 2025.10.28
JWT(Json Web Token)  (0) 2025.10.28
HTTPS와 SSL인증서의 역할  (0) 2025.10.28
CSRF(Cross-Site Request Forgery)  (0) 2025.10.28
쿠키와 세션  (0) 2025.10.28