CORS (Cross-Origin Resource Sharing)
: 사이트 간 출처 리소스 공유
애플리케이션을 통합하기 위한 보안 매커니즘이다.
한 도메인에서 다른 도메인에 있는 리소스와 상호작용하는 방법이다.
CSRF (Cross Site Request Forgery, 사이트 간 요청 위조) 문제를 대비
해커가 피해자의 권한을 도용하여 중요 기능을 실행한다.
피해자의 브라우저에서 다른 애플리케이션으로 가짜 클라이언트 요청을 전송한다.
모든 출처를 허용할 경우, 다른 주소로 인증 토큰이 첨부되어 사용자를 위조할 수 있다.
동일한 출처의 리소스에만 접근할 수 있도록 제한하는 정책이다.
클라이언트 URL의 프로토콜, 포트, 호스트 이름이 클라이언트에서 요청하는 서버와 일치해야 한다.
CORS는 동일 출처 정책을 확장한 것으로, 외부와 승인 하에 리소스를 공유하려면 CORS가 필요하다.
서버의 응답에는 문제가 없으나, 브라우저에서 구현되어 동일한 출처가 아니면 차단시킨다.
클라이언트 URL http://test.com/dir/page.html과 출처 URL 비교
URL | 결과 | 이유 |
---|---|---|
http://test.com/dir2/page2.html | 동일한 출처 | 경로만 다름 |
https://test.com/dir/page.html | 다른 출처 | 다른 프로토콜 |
http://test.com:81/dir/page.html | 다른 출처 | 다른 포트 |
http://newtest.com/dir/page.html | 다른 출처 | 다른 호스트 |
클라이언트에서 HTTP 요청 헤더에 Origin
전달
Origin: http://localhost:3000
서버에서 응답헤더에 Access-Control-Allow-Origin
을 담아 클라이언트로 전달
Access-Control-Allow-Origin: http://localhost:3000
브라우저가 Origin
과 Access-Control-Allow-Origin
을 비교한 후 차단 여부를 결정한다.