CORS(Cross Origin Resource Sharing)는 출처가 다른 서버의 자원에 접근하는 것을 제한하는 것이다.
CORS는 서버와 브라우저간에 안전한 교차 출처 요청 및 데이터 전송을 지원한다. XMLHttpResponse 및 Fetch 와 같은 API에서 교차 출처 요청의 위험을 완화한다.
Cross Origin(교차 출처 혹은 다른 출처)은 다음을 뜻한다.
http
와 https
www.a.com
와 www.b.com
:8000
와 :5000
즉, Protocol + Host + Port 가 출처(Origin)이 되고 이 출처가 같으면 같은 출처(Same Origin), 하나라도 다르면 다른 출처(Cross Origin)가 된다.
이렇게 다른 출처의 리소스에 접근하는 것을 제한하는 이유는 SOP(Same Origin Policy) 즉, 같은 출처 정책 때문이다.
브라우저는 보안상 이유로 이런 정책을 적용하고 있다. 다른 출처와의 리소스를 공유할 시 XSS(Cross-Site Scripting)
또는 CSRF(Cross-Site Request Forgery, 또는 XSRF)
와 같은 공격에 취약하게 된다.
XSS(Cross-Site Scripting)
- 사이트 간 스크립팅이라고 하며 공격자가 웹 페이지에 악성 스크립트를 등록하고 유저는 악성 스크립트가 포함된 게시물을 열람하거나 어떠한 행동을 취했을 때 공격자에게 해당 사용자에 대한 정보가 넘어가게 된다.
- 예를 들어, 공격자가
<script>유저의 쿠키에 접근!</script>
라는 게시글을 올렸을 때, 다른 유저가 그 게시글을 보기 위하여 클릭하게 되면 서버는 해당 요청을 호출하게 되고, 공격자가 올려놓은 악성 코드가 실행될 수 있다.
CSRF(Cross-Site Request Forgery)
- 사이트간 요청 변조라고 하며 악성 스크립트가 실행되는 위치가 유저가 아닌 서버에서 실행된다.