본문 바로가기
정보보안

XSS 공격과 CORS: 웹 보안의 핵심 개념

by Toddler_AD 2025. 9. 29.

XSS (Cross-Site Scripting) 공격의 주요 유형

1. Stored XSS (저장형 XSS)

  • 정의: 악성 스크립트가 대상 서버에 영구적으로 저장되는 공격 [1]
  • 작동 방식: 데이터베이스 등에 저장된 악성 코드가 사용자가 감염된 콘텐츠에 접근할 때 실행됨
  • 위험도: 가장 위험한 형태로, 지속적인 피해 발생 가능

2. Reflected XSS (반사형 XSS)

  • 정의: 웹 서버에서 반사되어 즉시 실행되는 악성 스크립트 [1]
  • 발생 위치: 오류 메시지, 검색 결과 등에서 주로 발생
  • 특징: 일회성 공격이지만 피싱과 결합하여 효과적으로 악용됨

3. DOM-based XSS (DOM 기반 XSS)

  • 정의: 클라이언트 측 코드에서 DOM이 안전하지 않게 조작될 때 발생 [9]
  • 특징: 서버와의 상호작용 없이 스크립트 주입이 가능
  • 위험성: 브라우저 내에서만 발생하여 탐지가 어려움

XSS 공격의 작동 원리

  • XSS 공격은 공격자가 악성 JavaScript를 주입하여 피해자의 브라우저에서 실행시키는 방식으로 작동합니다 [1]. 이를 통해:
    • 쿠키 및 세션 토큰 탈취
    • 사용자를 대신한 악의적 행동 수행
    • 민감한 정보 수집

CORS (Cross-Origin Resource Sharing) 보안 메커니즘

CORS의 기본 개념

  • CORS는 브라우저 보안 메커니즘으로, Same-Origin Policy (SOP)를 예외적으로 허용하여 교차 출처 HTTP 요청을 제어합니다 [2]. 

주요 HTTP 헤더

  • `Access-Control-Allow-Origin`: 리소스에 접근할 수 있는 도메인 지정 [2]
  • `Access-Control-Allow-Credentials`: 인증 정보 포함 여부 제어
  • `Access-Control-Allow-Methods`: 허용되는 HTTP 메서드 지정

CORS의 보안 효과

  • 무단 교차 출처 데이터 접근 방지 [3]
  • 일부 XSS 위험 완화
  • 웹 애플리케이션 간 안전한 통신 지원

CORS 설정의 한계와 위험성

잘못된 CORS 구성의 문제점

  1. 과도하게 허용적인 출처 설정 [4]
  2. 와일드카드(*)와 인증 정보 동시 허용 [5]
  3. 신뢰할 수 있는 출처의 XSS 취약점과 결합된 공격 [6]

보안 위험 시나리오

  • 잘못 구성된 CORS 정책으로 인한 데이터 유출
  • XSS와 CORS 취약점의 연쇄 공격 [6]

XSS 방지를 위한 모범 사례

1. 입력 및 출력 보안

  • 모든 사용자 입력 및 출력의 적절한 살균 및 인코딩 [7]
  • 신뢰할 수 없는 데이터에 대한 엄격한 검증

2. Content Security Policy (CSP) 구현

  • CSP 헤더를 사용하여 스크립트 실행 제한 [8]
  • 인라인 스크립트 및 eval() 사용 금지

3. 보안 프레임워크 활용

  • 자동 이스케이프 기능이 있는 보안 프레임워크 사용 (예: React, Angular) [1]
  • 안전하지 않은 동적 코드 실행 방지

4. CORS 보안 구성

  • 신뢰할 수 있는 출처만 허용하는 엄격한 CORS 구성 [5]
  • 인증 정보와 함께 와일드카드(*) 사용 금지
  • 정기적인 CORS 정책 검토 및 업데이트

5. 보안 테스트 및 모니터링

  • 보안 테스트 도구 사용 [7]
  • OWASP XSS 방지 가이드라인 준수
  • 지속적인 보안 모니터링 및 업데이트

결론

  • XSS와 CORS는 현대 웹 보안에서 핵심적인 요소입니다. 개발자는 이러한 취약점을 이해하고 적절한 보안 조치를 구현하여 사용자와 애플리케이션을 보호해야 합니다. 특히 입력 검증, CSP 구현, 그리고 적절한 CORS 구성을 통해 포괄적인 보안 전략을 수립하는 것이 중요합니다.

 

---

Sources

[1] https://www.youtube.com/watch?v=LfI6TAchgT4&t=57s

[2] https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS

[3] https://www.vaadata.com/blog/understanding-and-preventing-cors-misconfiguration/

[4] https://www.antoinebernard.com/understand-cors-to-really-solve-it/

[5] https://portswigger.net/web-security/cors