
SOP는 웹 브라우저의 보안을 강화하기 위해 만들어진 규칙이며, 다른 출처와의 접근을 제한하는 것이다.
주 목적은 보안을 강화해서 서로 다른 웹사이트로 부터 데이터를 무분별하게 가져오는 것을 막아준다.
예를 들어 이러한 경우를 예시로 들어 비교할 수 있다.
1.https://example.com===https://example.com:8080=> 포트가 달라 다른출처
2.https://example.com===http://example.com=> 프로토콜이 달라 다른출처
3.https://example.com===https://sub.example.com=> 도메인이 달라 다른출처
Preflight Request(프리플라이트 요청)는 CORS 요청 중 안전하지 않은 요청을 하기 전에 브라우저가 미리 서버에게 허가를 받기 위해 보내는 요청이다.
사전 확인을 위한 Preflight 요청은 OPTIONS 메서드로 이워잔다.

브라우저가 데이터를 요청 하기전 받을 수 있는 지 확인을 하기 위해 CORS를 보내는데 서버가 거절한다면
브라우저 측에서 주지 않는다.
이러한 문제를 보완하기 위해 Proxy 서버를 이용하게 되는데 이 것은 클라이언트와 서버 사이에 위치하여 중계 역할을 하는 보조 서버다.
브라우저가 CORS를 보내는데 서버가 거절한다면
서버가 거부해서 못하는 것이 아니라 브라우저가 주지 않는다. 이는 브라우저가 자신을 보호하기 위한 행동이다.
CSRF는 사용자가 신뢰하는 웹사이트에 대해 공격자가 위조된 요청을 전송하게 만들어, 사용자가 의도하지 않은 행동을 하도록 하는 웹 보안 공격이다.
클라이언트 측에 저장되어 동일한 웹 사이트에 접속할 때마다 해당 쿠키를 서버로 자동 전송함.
2가지 수명(세션쿠키, 영구쿠키)
사용자는 A사이트에 로그인을 해서 A사이트는 사용자의 세션을 유지하기 위해 쿠키를 사용.
공격자는 사용자에게 악성링크(이메일, 메세지, 피싱사이트)를 전달함.
사용자가 링크를 클릭하게 되면 브라우저는 사용자가 로그인한 A사이트에게 자동으로 요청을 전송함. 브라우저는 쿠키(사용자 인증 정보를 포함)를 A사이트에게 전송하기 때문에 A사이트는 이 요청이 유효한 사용자에게 온 것으로 착각해서 정상처리하게 됨.
A사이트는 사용자가 보내지 않은 요청을 정상요청으로 받아들이고 공격자는 마음대로 사용하여 피해를 입히게 된다.(계정 수정, 금융 거래 등)
CORS 차단: 다른 출처에서 오는 요청을 제한하여, 공격자가 임의의 웹사이트를 통해 악의적인 요청을 보내는 것을 방지
CSRF 토큰 사용: CSRF 공격을 방지하기 위한 보안 매커니즘. CSRF 토큰을 사용하면 서버는 요청이 실제 사용자가 보낸건지 확인 할 수 있다.
토큰생성: 사용자가 로그인하면 서버는 사용자에 대한 고유 CSRF 토큰을 생성한다.
이 토큰은 서버의 세션(서버가 사용자에 대한 정보를 저장하고 관리하는 방식)에 저장되어 클라이언트 에서도 사용하기 위해 HTML폼이나 HTTP헤더에 포함하여 전송함.
사용자가 웹에 폼을 제출할때 토큰도 함께 제출해야한다.
토큰과 함께 요청을 보낸다면 서버는 요청받은 토큰과 사용자 세션에 저장된 토큰을 비교한다. 이로써 일치하면 승인하고 일치하지 않다면 거부함.