← 질문 목록
#38깊이 0
CORS는 무엇을 막는가?
다른 출처에서 온 스크립트가 응답을 읽는 것을 막는다. 요청 자체를 막는 것이 아니다 — 서버에는 도착하고, 브라우저가 결과를 스크립트에 안 넘긴다.
- 1. 스크립트에서 브라우저로: 다른 출처로 DELETE를 보내겠다
- 2. 브라우저에서 서버로: 먼저 OPTIONS로 물어본다
- 3. 서버에서 브라우저로: 이 출처와 이 메서드는 허용한다
- 4. 브라우저에서 서버로: 그제서야 진짜 요청을 보낸다
단순한 요청은 이 예비 확인을 건너뛰고 바로 나간다. 그래서 폼 전송으로 하는 공격은 CORS로 못 막는다 — 그쪽은 CSRF 토큰의 몫이다.
핵심 정리
오해가 잦은 지점이 여기다. CORS는 내 서버를 지키는 장치가 아니라 사용자의 브라우저에 있는 자격 증명을 남의 페이지가 쓰지 못하게 하는 장치다. 서버 인증은 따로 있어야 한다.
쿠키를 함께 보내려면 양쪽이 더 엄격해진다. 출처를 *로 열어둘 수 없고 정확한 주소를 적어야 한다. 개발 중에 *로 열어놓고 배포에서 막히는 일이 여기서 나온다.