SOP : 동일 출처 정책(Same Origin Policy)
말 그대로, 어떤 한 origin(서버)에서 불러온 문서나 스크립트(ex. html, js)가 다른 origin(서버)에서 가져온 리소스와 상호 작용하는 것을 제한하는 보안 방식이다.
핵심은 바로, 이 SOP를 해주는 곳이 어디냐이다
SOP는 브라우저에 내장된 SOP 엔진이 적용시켜준다. 즉, 서버가 이러한 정책을 지키는 것이 아니라, 클라이언트(브라우져)가 이 정책을 지키는 것이다.
CORS : Cross Origin Resource Sharing
SOP 정책의 반댓말로, 서로 다른 origin 끼리 리소스의 상호 작용을 허용하는 것이다.
실제 예시로, 우리는 네이버, 카카오의 open api를 사용할 수 있는데, 이게 바로 기업의 서버가 CORS를 허용해서 가능한 것이다.
이런 허용은 서버 단의 controller에서 2~3줄의 코드로 적용할 수 있다. 필자의 경험을 토대로
허용 방식은 검색해보면 바로 알 수 있으니 skip.
구체적인 동작
로컬 서버에서 클라이언트와 서버 간의 연동을 해본 사람은 종종 겪을 수 있는 문제이다.
이런 에러는 브라우저 console이나 브라우저 개발자 모드로 진입하여 서버에서 클라이언트로 보낸 response header 등을 보면 CORS 에러를 확인할 수 있다.
중요한 것은, 서버에서는 정보를 보낸다는 점이다. 이는 서버 단에서 정보를 요청 받고 보내는 부분(controller 역할을 하는 부분)을 서버 단 console등으로 호출이 되는지 찍어서 확인해보면 알 수 있다.
즉, SOP, CORS 정책은, 일단 서버가 정보를 클라이언트로 보내주는 것은 동일하지만, 클라이언트로 전송하는 response의 header 부분에 CORS를 허용한다고 하면, 클라이언트 단에서 정보를 볼 수 있는 것이고, 허용하지 않는다면 정보를 볼 수 없는 것이다.
다시 말해, 이러한 요청을 처리해주는 다른 로직이 없다면, 서버가 하는 일은 동일하다.
서버가 요청을 받고 정보를 보낸다는 점이 왜 중요할까?
바로 보안과 관련되기 때문이다.
기업들이 CORS를 허용하면서, 굳이 우리에게 KEY를 제공하는 이유도 여기에서 나온다고 볼 수 있다.
해커와 같은 익명의 누군가가 서버에 수많은 요청을 계속 보낼 수 있고(DOS, DDOS), 이는 서버에 부하가 생겨서 서버가 다운될 수 있다.
그렇기 때문에, 우리는 기업에게 우리가 누구인지에 대한 신상 정보를 넘기면서 API KEY를 발급받는 것이다.
사실, 이렇게 기업이 우리가 누구인지 알 수 있다고 해서 DOS를 막을 수 있는 것은 아니다.
해커가 DOS 공격을 하는 이유는, 정보가 중요한 것이 아니라 서버를 다운시키는 것이 중요한 것이기 때문에, 무차별 적으로 요청을 찔러대기 때문에, SOP, CORS와는 관련이 없다. 단지, KEY를 사용해서 서버를 공격한다면(그럴 일은 없겠지만), 그 공격자가 누구인지 판별할 수 있기 때문이기도 하고, 식별된 사람들이 요청을 보내기 때문에 안전하리라고 믿는 것일 뿐이다.
그렇다면, DOS와 같은 공격은 어떻게 막을까?
사실, 여기서부터는 내 지식의 밖이다.
단지, 방화벽과 같은 여러 보안 장치들이 이러한 공격을 막아준다는 것을 알고 있을 뿐이다.
태클 감사합니다.
조언 환영입니다.
반박 시, 님들 말이 맞을 확률이 높습니다.