본문 바로가기

CORS

웹 페이지가 다른 출처(도메인, 프로토콜, 포트)의 리소스에 접근할 수 있도록 하는 보안 메커니즘

동일 출처 정책(Same-Origin Policy)

  • 웹 보안의 기본적인 원칙
  • 웹 브라우저가 다른 출처(도메인, 프로토콜, 포트가 다른 경우)의 리소스와 상호 작용하는 것을 제한
  • 사용자의 민감한 데이터를 보호하고, 악의적인 웹사이트가 사용자 데이터를 탈취하는 것을 방지

CORS의 필요성

  • 현대의 웹 애플리케이션은 다양한 출처의 리소스를 통합하여 사용자에게 제공
  • 예시
    • 다른 도메인의 API에서 데이터를 가져오는 경우
    • CDN(Content Delivery Network)을 사용하여 이미지나 스크립트를 로드
  • CORS는 동일 출처 정책을 유지하면서 위와 같은 상황의 예외를 설정하여 웹 애플리케이션의 기능을 확장할 수 있는 메커니즘을 제공

CORS 요청의 두 가지 방식

  1. Simple Requests (단순 요청):
    • Method 조건: GET, POST, HEAD 메서드
    • Header 조건: 유저 에이전트가 자동으로 설정 한 헤더
    • Content-Type 조건: application/x-www-form-urlencoded, multipart/form-data, text/plain만 허용
    • 동작 방식: 요청이 서버로 직접 전송되며, 서버의 응답에 포함된 Access-Control-Allow-Origin 헤더를 통해 브라우저에서 접근 허용 여부를 검사
  2. Preflight Requests (사전 요청):
    • 사용 조건: 단순 요청 조건을 만족하지 못한 경우
    • 동작 방식:
      • 브라우저가 서버에 OPTIONS 메서드를 사용하여 사전 요청을 보냄
      • 서버는 요청을 처리할 수 있는지를 나타내는 헤더들을 응답으로 보냄
      • 브라우저는 이 응답의 헤더 조건을을 검사한 후 본 요청을 실행할지 결정

Credentialed Requests

  • 기본적으로, 웹 브라우저는 다른 출처의 리소스 요청 시 자격 증명 정보(쿠키, Authorization 같은 인증 관련 헤더 등)를 포함시키지 않음
  • 조건
    • Access-Control-Allow-Credentials: true 헤더를 포함(사용 프로그램에 따라 방법 다름)
    • Access-Control-Allow-Origin 헤더에는 구체적인 도메인을 명시해야 하며, "*"(모든 출처 허용)을 사용할 수 없음

CORS 설정을 위한 주요 HTTP 헤더

  • Access-Control-Allow-Origin: 특정 출처에서의 요청만을 허용
  • Access-Control-Allow-Methods: 서버가 허용하는 메서드를 지정
  • Access-Control-Allow-Headers: 서버가 수락할 수 있는 HTTP 헤더를 명시
  • Access-Control-Allow-Credentials: 자격 증명(쿠키 등)과 함께 요청을 보낼 수 있도록 허용
  • Access-Control-Max-Age: 사전 요청의 결과를 캐시할 수 있는 최대 시간을 지정
  • Access-Control-Expose-Headers: 브라우저가 응답에서 접근할 수 있는 헤더를 지정

'' 카테고리의 다른 글

CSR/SSR  (0) 2024.04.27
UI/UX  (0) 2024.04.27
Web Server와 Web Application Server(WAS)  (0) 2024.04.19
OAuth 2.0  (0) 2024.04.19
Authentication & Authorization  (0) 2024.04.19