웹 개발을 하다보면 CORS관련 경고를 가끔 보곤 한다.
CORS를 알려면 SOP를 먼저 알아야한다.
Single Origin Policy의 줄임말
웹 보안 모델중 하나, 서로 다룬 출처 간의 리소스 접근을 제한하는 정책이다.
외부 API 사용에 있어서 대표적인 두 가지 방식이 있다. form(html태그)과 AJAX(Javascript)다.
Web Browser는 html 태그에 대해서는 Cross-Origin을 허용한다.
<form name="frm" action="hj.js" method="GET">
<img src="http://www.hj.com/sample.png">
<video src="http://www.hj.com/sample.mp4">
Asychronous Javascript And XML의 줄임말이다.
AJAX는 FORM과 다르게 Javascript라는 점에서 다르다.
대표적으로 Fetch API가 있다.
fetch("https://jsonplaceholder.typicode.com/posts")
.then((response) => {
if (!response.ok) {
throw new Error("Network response was not ok "
+ response.statusText);
}
return response.json();
})
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
form에서는 데이터 조회와 제출만 진행하지만, (제출도 위험하다, 추후에 설명)
AJAX에서는 Cross-Origin의 서버 상태를 변경하는 더 다양한 행위가 가능해졌다.
Frontend와 Backend의 서버가 다를 경우, 이에 대해 허용을 해야하는데 SOP정책으로 인해 데이터 조회 및 서버 상태 변경이 불가한 상황이 되는 것이다.
그래서 AJAX에 대해 SOP를 보완하는 정책이 생겼는데, 그것이 CORS이다.
Cross Origin Resource Sharing의 줄임말이다.
웹 서버는 웹 브라우저로부터 어떤 요청만 허용하는지 3가지 CORS 헤더 설정으로 호출가능 요청을 제약한다.
이 과정도 두 가지로 나뉜다

서버 데이터에 큰 위험이 되지 않을 만한 사항
위 3가지 상황에는 Header와 Request를 같이 보낸다.

위 4가지 사항때 preflight를 사용하곤 한다.
쉽게 말하자면, 정보를 줘도 되는지에 대한 Header값을 먼저 보내고, OK신호가 브라우저에서 온다면 그때 정보를 넘겨준다는 것
결론적으로는 아니다.
CORS는 웹 브라우저 정책이기에, 네이티브 app에서는 적용되지 않는다 -> CSRF 토큰
FORM 요청에는 CORS 정책이 적용되지 않는다 -> CSRF 토큰
CSRF는 웹 보안 공격의 한 종류로, 의도하지 않은 요청을 서버에 전송하게 만드는 공격
예시
이를 막기 위한 방법중 하나가 CSRF 토큰이다.
주로 위치는 아래와 같다.
쿠키에 대해선 SameSite라는 속성값이 존재한다.
우선 퍼스트파티 쿠키와 서드파티 쿠키에 대해 이해하여야 한다.

퍼스트파티 쿠키가 Cross-Site에서 사용되는 문제를 막기 위해 SameSite라는 옵션이 추가되었다.
3가지 속성이 존재한다.
해당 내용은 헤더에 담겨 리소스 사용시 모든 요청에 포함되게 된다.
비밀댓글입니다.