◆ 공격과 방어 기법
CORS 해결하기, 3가지 방법
쿠키린
2024. 10. 29. 01:08
CORS
- 에러나 오류가 아니다.
- Cross-Origin Resource Sharing Policy이다.
- Front와 Back을 나눌때 개발을 할 때에는 단순히 Front에서 fetch 요청으로 Back을 바라보고 날리면 될줄 알았는데
- 하나의 보안 정책이다.
- 현재 IP가 아닌 다른 IP로 리소스를 요청하는 구조
발생하는 이유는?
- Origin
- 요청이 시작된 서버의 위치를 나타내는 문구
- Client 서버 ( http://client:80 )
- 로그인 API 서버 ( http://login:3000)
- 이 2개의 IP는 서로 다른 IP의 번호를 가짐. 클라이언트 서버가 로그인 서버에게 HTTP 요청을 보낼 때 Origin이 다르다. ( 이를 Cross Origin )
- Origin을 구분할 때는 3가지를 이용한다.
- 스키마
- HOST
- Port
- https://tistory:80 경로가 있다면 여기에 스키마, host, Post 모두가 포함
- https : 스키마
- tisotry : Host
- 80 : Port
- https://tistory:80 경로가 있다면 여기에 스키마, host, Post 모두가 포함
- 요청이 시작된 서버의 위치를 나타내는 문구
- SOP
- Same Origin Policy
- 보안정책으로 동일한 출처의 Origin만 리소스를 공유할 수 있다.
- SOP 때문에 사실상 CORS 문제 허덕인다고 해도 과언이 아니다.
- SOP 표준에 따라야지 XX라던지 CSRF라는 보안상의 ISSUE를 막을 수 있게 된다.
- Access-Control-Allow-Origin
- Access-Control-Allow-Origin은 바로 CORS를 해결할 수 있다.
- SOP 정책에 따라서 같은 Origin의 자원만 공유 가능했지만, Access-Control-Allow-Origin 덕분에 서로 다른 Origin에서 자원 공유가 가능해진다.
CORS 동작 방식
🔽Cross Origin에서 자원을 요청하기 위한 과정
- HTTP 통신 헤더인 Origin 헤더에 요청을 보내는 곳의 정보를 담고 서버로 요청 보내기
- 이후 서버는 Access-Control-Allow-Origin헤더에 허용된 Origin이라는 정보를 담아 보내기
- 클라이언트는 헤더의 값과 비교해 정상 응답임을 확인하고 지정된 요청 보내기
- 서버는 요청을 수행하고 200OK 코드를 응답
참조 : https://wonit.tistory.com/307
3가지 방법
@CrossOrigin(origins = “허용주소:포트”)
[Spring Boot] CORS 를 해결하는 3가지 방법 (Filter, @CrossOrigin, WebMvcConfigurer)
Server Side Template 방식이 아닌 Front와 Back 으로 나눠서 인프라를 구성해본 경험이 있는 사람들에게는 Cors가 매우 친숙할 수 있다. 현재 개발 흐름에서 웹 프로젝트를 진행하다가 Cors 를 만날 확률은
wonit.tistory.com
+
https://jmlim.github.io/spring/2018/12/11/spring-boot-crossorigin/
스프링 부트에서 크로스도메인 이슈 처리하기. (@CrossOrigin 어노테이션을 사용) · 기억하기 위한
스프링 부트에서 크로스도메인 이슈 처리하기. (@CrossOrigin 어노테이션을 사용) 11 Dec 2018 | Spring CORS Cross Domain 크로스도메인 이슈란? Ajax 등을 통해 다른 도메인의 서버에 url(data)를 호출할 경우 XMLH
jmlim.github.io