CORS 검사기
모든 URL에 대한 교차 출처 리소스 공유(CORS) 구성을 확인하세요. Access-Control-* 응답 헤드를 검사하고, 사용자 정의 Origin/메서드/헤더로 선택적 프리플라이트(OPTIONS) 요청을 실행하며, 와일드카드 + 자격 증명, 누락된 Vary: Origin, 또는 지나치게 광범위한 allow-headers와 같은 일반적인 오류 구성을 감지합니다.
기능
- 모든 공개 URL에 대한 CORS 헤더 검사(Access-Control-* 및 관련 헤더).
- 사용자 정의 Origin, 요청 메서드 및 요청 헤더를 사용한 선택적 프리플라이트 시뮬레이션(OPTIONS).
- 리디렉션(최대 10회)을 따라가 브라우저가 실제로 접근하는 최종 엔드포인트를 검증합니다.
- 완전한 투명성과 디버깅을 위한 원시 헤더 보기.
- 발견 사항 + 점수 카드와 함께 "문제만" 필터링 기능으로 빠른 분류 가능.
- 누락된 Vary: Origin 및 기타 캐시 관련 CORS 함정을 감지하는 Vary 분석.
- 감사, 티켓 및 문서화를 위해 결과를 JSON 및 PDF 보고서로 내보내기.
- 일반적인 문제에 대한 내장 권장 사항: 와일드카드+자격 증명, Origin 반영, null Origin, 누락된 allow-methods/allow-headers, 누락된 max-age, 지나치게 광범위한 allow-headers.
🧭 사용 방법 for cors-checker
대상 URL 입력
테스트하려는 엔드포인트를 붙여넣으세요(예: https://api.example.com/resource).
테스트하는 Origin 설정
프론트엔드 앱의 Origin(스키마 + 호스트)을 입력하세요(예: https://app.example.com). 이는 브라우저가 Origin 헤더로 보내는 값입니다.
검사 모드 선택
응답 헤더와 프리플라이트 동작을 모두 분석하려면 자동(권장)을 사용하세요. 비프리플라이트 시나리오를 원하면 단순 요청을, OPTIONS 검사만 실행하려면 프리플라이트 전용을 사용하세요.
프리플라이트 세부 사항 구성(해당하는 경우)
"프리플라이트 실행(OPTIONS)"을 활성화하고 요청 메서드와 요청 헤더(쉼표로 구분)를 설정하여 실제 브라우저 프리플라이트 동작(예: 인증, 콘텐츠 유형)을 시뮬레이션하세요. 사용 사례에 쿠키 또는 인증 헤더가 포함된 경우 "자격 증명 고려"를 토글하세요.
발견 사항 검토 및 내보내기
발견 사항/점수 카드와 CORS 분석 세부 정보를 확인하세요. 디버깅 시 "원시 헤더 표시"를 켜세요. 감사, 공유 또는 저장을 위해 JSON/PDF로 내보내세요.
기술 사양
요청 모델
이 도구는 대상 URL에 대한 CORS 헤더를 검사하고, 제공된 Origin, 메서드 및 요청 헤더를 사용하여 선택적으로 프리플라이트(OPTIONS) 요청을 수행할 수 있습니다. 리디렉션 추적이 지원됩니다.
| 설정 | 동작 | 기본값 |
|---|---|---|
| 검사 모드 | 자동, 단순 요청 또는 프리플라이트만 | 자동 |
| 프리플라이트 실행 (OPTIONS) | 활성화 시 OPTIONS 프리플라이트 시뮬레이션 수행 | 활성화됨 |
| 오리진 | 분석/프리플라이트에 사용되는 Origin 헤더 값 | https://example.com |
| 요청 메서드 | 프리플라이트용 Access-Control-Request-Method 값 | GET |
| 요청 헤더 | 프리플라이트용 Access-Control-Request-Headers (쉼표로 구분) | 비어 있음 |
| 리디렉션 따르기 | 최종 URL까지 리디렉션 체인을 따름 | 활성화됨 |
| 최대 리디렉션 횟수 | 루프 방지를 위한 리디렉션 상한 | 10 (범위 0–20) |
| 타임아웃 | 요청 타임아웃 제한 | 15000 ms |
| 사용자 에이전트 | 요청 사용자 에이전트를 식별 | Encode64Bot/1.0 (+https://encode64.com) |
| 사설 네트워크 | 안전을 위해 사설 네트워크 범위 접근 차단 | 비활성화됨 (사설 네트워크 허용 안 됨) |
분석된 헤더 (핵심 CORS 세트)
분석기는 브라우저 및 프리플라이트 검사에서 사용되는 표준 CORS 응답 및 요청 헤더에 중점을 둡니다.
| 헤더 | 목적 |
|---|---|
| Access-Control-Allow-Origin | 어떤 오리진이 허용되는지 |
| Access-Control-Allow-Credentials | 쿠키/자격 증명 허용 여부 (와일드카드가 아닌 오리진 필요) |
| Access-Control-Allow-Methods | 교차 출처 요청에 허용되는 메서드 (사전 검사에 중요) |
| Access-Control-Allow-Headers | 허용되는 헤더 (인증 및 사용자 정의 헤더에 중요) |
| Access-Control-Expose-Headers | 브라우저 JS에서 읽을 수 있는 헤더 |
| Access-Control-Max-Age | 브라우저가 사전 검사를 캐시할 수 있는 시간 |
| Vary | 캐시 키 변형 (예: Vary: Origin)으로 캐시 오염/혼합 방지 |
| Origin / Access-Control-Request-* | 사전 검사 동작을 시뮬레이션하는 데 사용 |
발견 패턴 (흔한 CORS 문제점 플래그)
결과는 실용적이고 보안 중심의 검사를 기반으로 하여 손상되었거나 위험한 CORS 설정을 탐지합니다.
| 검사 항목 | 중요성 |
|---|---|
| 와일드카드 + 자격 증명 | Access-Control-Allow-Origin: *는 자격 증명과 함께 사용할 수 없음; 브라우저가 차단하거나 동작이 안전하지 않음 |
| 누락된 Vary: Origin | 응답이 Origin별로 다르지만 올바르게 캐시되지 않으면, 공유 캐시가 사이트 간 응답을 혼합할 수 있음 |
| Origin 반사 | Origin을 무분별하게 반향하면 신뢰할 수 없는 출처를 의도치 않게 허용할 수 있음 |
| Null Origin 경고 | Origin: null은 샌드박스된 iframe 또는 파일 컨텍스트에서 나타날 수 있음; 이를 허용하는 것은 종종 위험함 |
| 누락된 Allow-Methods / Allow-Headers | 서버가 메서드/헤더를 명시적으로 허용하지 않으면 사전 검사가 실패할 수 있음 |
| 과도하게 허용된 Allow-Headers | 너무 많은 헤더를 허용하면 공격 표면이 확대될 수 있음 |
| 누락된 Max-Age | 사전 검사가 너무 자주 실행되어 지연 시간이 증가할 수 있음 |
명령줄
터미널에서 CORS 및 사전 검사 동작을 재현하려면 다음 명령어를 사용하세요. 도구가 보고하는 내용을 디버깅하고 확인하는 데 유용합니다.
macOS / Linux
일반 요청에 대한 CORS 헤더 확인 (브라우저 Origin 시뮬레이션)
curl -i -H "Origin: https://example.com" https://api.example.com/resourceAccess-Control-Allow-Origin, Access-Control-Allow-Credentials, Vary를 확인하세요.
사전 검사 OPTIONS 요청 실행 (메서드 + 헤더)
curl -i -X OPTIONS -H "Origin: https://app.example.com" -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: authorization, content-type" https://api.example.com/private브라우저가 진행하려면 사전 검사가 올바른 Access-Control-Allow-Methods 및 Access-Control-Allow-Headers를 반환해야 합니다.
헤더를 확인하면서 리디렉션을 따르기
curl -iL -H "Origin: https://example.com" https://api.example.com엔드포인트가 다른 CORS 규칙을 가진 다른 호스트로 리디렉션할 때 유용합니다.
Windows (PowerShell)
Origin 헤더와 함께 응답 헤더 검사하기
$r = Invoke-WebRequest -Uri https://api.example.com/resource -Headers @{ Origin = "https://example.com" }; $r.HeadersAccess-Control-* 헤더가 존재하는 경우 표시합니다.
사용 사례
프론트엔드 "CORS 차단" 브라우저 오류 디버깅
fetch/XHR가 CORS 오류로 실패할 때, 서버가 사용자의 Origin과 요청 유형에 필요한 Access-Control-* 헤더를 반환하는지 확인하세요.
- Access-Control-Allow-Origin이 앱 출처와 일치하는지 확인
- 쿠키/인증을 사용하는 경우 Access-Control-Allow-Credentials가 true인지 확인 (그리고 출처가 와일드카드가 아닌지)
- 여러 출처를 허용할 때 Vary: Origin이 존재하는지 확인
Authorization / 사용자 정의 헤더에 대한 사전 요청 검증
대부분의 인증된 API 호출은 Authorization 또는 비단순 콘텐츠 유형으로 인해 사전 요청을 트리거합니다. 이 도구는 OPTIONS 응답이 필요한 메서드와 헤더를 허용하는지 확인하는 데 도움이 됩니다.
- Access-Control-Allow-Methods에 필요에 따라 POST/PUT/PATCH/DELETE가 포함되어 있는지 확인
- Access-Control-Allow-Headers에 authorization, content-type 및 필요한 X-* 헤더가 포함되어 있는지 확인
- 배포 전 누락된 allow-methods/allow-headers 발견하기
CORS 정책 보안 검토
CORS 오설정은 (특히 자격 증명과 함께) 악의적인 사이트에 비공개 API를 의도치 않게 노출시킬 수 있습니다. 결과를 사용하여 고위험 패턴을 발견하세요.
- 자격 증명과 결합된 와일드카드 출처 감지
- 임의의 사이트를 허용하는 출처 반영 패턴 감지
- 의도하지 않은 경우 Origin: null 허용 플래그 지정
사전 요청 캐싱으로 성능 향상
사전 요청은 왕복 시간과 지연 시간을 추가합니다. 올바른 Max-Age는 안정적인 API에 대한 반복적인 사전 요청 검사를 줄일 수 있습니다.
- 적절할 때 Access-Control-Max-Age가 존재하는지 확인
- 빈번한 API 트래픽에 대한 반복적인 OPTIONS 호출 줄이기
❓ Frequently Asked Questions
❓간단히 말해 CORS란 무엇인가요?
CORS(교차 출처 리소스 공유)는 한 출처(스킴 + 호스트 + 포트)의 웹페이지가 다른 출처의 응답을 읽을 수 있는지 제어하는 브라우저 보안 메커니즘입니다. 이는 특정 Access-Control-* 응답 헤더에 의존합니다.❓브라우저는 언제 사전 요청(OPTIONS)을 보내나요?
❓왜 "Access-Control-Allow-Origin: *"이 자격 증명과 함께 사용될 때 위험한가요?
❓왜 Vary: Origin이 필요한가요?
❓CORS가 브라우저가 아닌 클라이언트로부터 내 API를 보호할 수 있나요?
CORS는 브라우저에 의해 강제됩니다. 브라우저 외부에서 실행되는 스크립트(서버, curl, 모바일 앱)는 CORS와 관계없이 귀하의 API를 호출할 수 있습니다. 실제 접근 제어를 위해서는 인증, 권한 부여 및 속도 제한을 사용하세요.❓사전 요청을 테스트할 때 "요청 헤더"에 무엇을 입력해야 하나요?
❓여기에 URL을 붙여넣는 것이 안전한가요?
Pro Tips
모든 Origin을 반영하는 대신 신뢰할 수 있는 출처의 허용 목록을 선호하세요. CORS를 보안에 민감한 구성으로 취급하세요.
쿠키/인증을 사용하는 경우, Access-Control-Allow-Credentials: true를 설정하고 명시적인 출처( "*"가 아닌)를 반환하세요.
여러 출처를 허용하거나 허용된 출처를 동적으로 선택할 때 Vary: Origin을 추가하세요.
안정적인 API의 경우 사전 요청 지연을 줄이기 위해 적절한 Access-Control-Max-Age를 추가하세요.
사전 요청과 실제 요청 경로를 모두 테스트하세요. 일부 설정은 GET에 대해 올바른 헤더를 반환하지만 OPTIONS에서는 실패할 수 있습니다.
JSON 보고서를 내보내고 API 게이트웨이 구성 변경과 함께 보관하여 빠르게 회귀를 발견하세요.
Additional Resources
Other Tools
- CSS 정리 도구
- HTML 정리 도구
- 자바스크립트 정리 도구
- PHP 정리 도구
- 색상 선택기
- 스프라이트 추출기
- Base32 이진 인코더
- Base32 디코더
- Base32 인코더
- Base58 이진 인코더
- Base58 디코더
- Base58 인코더
- Base62 이진 인코더
- Base62 디코더
- Base62 인코더
- Base64 이진 인코더
- Base64 디코더
- Base64 인코더
- 16진수 이진 인코더
- 16진수 디코더
- 16진수 인코더
- C# 포맷터
- CSV 포맷터
- Dockerfile Formatter
- Elm 포맷터
- ENV 포맷터
- Go 포맷터
- GraphQL 포맷터
- HCL 포맷터
- INI 포맷터
- JSON 포맷터
- LaTeX 포맷터
- 마크다운 포맷터
- Objective-C 포맷터
- Php Formatter
- 프로토콜 버퍼 포맷터
- Python 포맷터
- Ruby 포맷터
- Rust 포맷터
- Scala 포맷터
- 셸 스크립트 포맷터
- SQL 포맷터
- SVG 포맷터
- Swift 포맷터
- TOML 포맷터
- Typescript Formatter
- XML 포맷터
- YAML 포맷터
- Yarn 포맷터
- CSS 압축기
- Html Minifier
- Javascript Minifier
- JSON 압축기
- XML 최소화 도구
- Cache Headers Analyzer
- Csp Analyzer
- Dns Records Lookup
- HTTP 헤더 뷰어
- Http Status Checker
- Open Graph Meta Checker
- Redirect Chain Viewer
- Robots Txt Tester
- Security Headers Checker
- Security Txt Checker
- Sitemap Url Inspector
- Tls Certificate Checker
- PDF 텍스트 변환
- 정규식 테스터
- 검색 순위 확인기
- Whois 조회