웹
CORS
탁재민
2024. 4. 27. 21:53
웹 페이지가 다른 출처(도메인, 프로토콜, 포트)의 리소스에 접근할 수 있도록 하는 보안 메커니즘
동일 출처 정책(Same-Origin Policy)
- 웹 보안의 기본적인 원칙
- 웹 브라우저가 다른 출처(도메인, 프로토콜, 포트가 다른 경우)의 리소스와 상호 작용하는 것을 제한
- 사용자의 민감한 데이터를 보호하고, 악의적인 웹사이트가 사용자 데이터를 탈취하는 것을 방지
CORS의 필요성
- 현대의 웹 애플리케이션은 다양한 출처의 리소스를 통합하여 사용자에게 제공
- 예시
- 다른 도메인의 API에서 데이터를 가져오는 경우
- CDN(Content Delivery Network)을 사용하여 이미지나 스크립트를 로드
- CORS는 동일 출처 정책을 유지하면서 위와 같은 상황의 예외를 설정하여 웹 애플리케이션의 기능을 확장할 수 있는 메커니즘을 제공
CORS 요청의 두 가지 방식
- Simple Requests (단순 요청):
- Method 조건: GET, POST, HEAD 메서드
- Header 조건: 유저 에이전트가 자동으로 설정 한 헤더
- Content-Type 조건: application/x-www-form-urlencoded, multipart/form-data, text/plain만 허용
- 동작 방식: 요청이 서버로 직접 전송되며, 서버의 응답에 포함된 Access-Control-Allow-Origin 헤더를 통해 브라우저에서 접근 허용 여부를 검사
- 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: 브라우저가 응답에서 접근할 수 있는 헤더를 지정