Same-origin Policy 동일 출처 정책
동일 출처 정책이란 같은 도메인, 스키마, 포트 가 동일해야 브라우저에서 요청을 허용한다. 그러므로 다른 도메인에서 자바스크립트로 접근하려 할 때 브라우저는 이것을 감지하고 다른 출처의 자원에 접근을 허용하지 않는다. 그렇기 때문에 제한적이어서 유연하게 만든 것이 CORS 라고 한다.
*<script><iframe> 태그는 로드는 가능하지만 자바스크립트를 실행할 때 접근 못하게 하는 것이다.
Cross-origin resource sharing 교차 출처 자원 공유
CORS는 몇 가지 규칙을 가지고 다른 출처에서도 자원을 쓸 수 있게 해주는 것
ACAO
Access-Controll-Allow-Origin는 응답 헤더에 들어가고 다른 출처에서 자원을 쓸 수 있게 해주는 것이지만 허용한 출처만 자원을 쓸 수 있게 해주는 것
이렇게 화이트리스트로 관리를 해서 도메인을 하나하나 추가해야 하는데 귀찮을 걸 싫어하는 우리 개발자들은 ACAO 헤더에 모든 도메인을 허용하는 * 이런 문자를 넣는다.
그래서 보안상 좋지 않기 때문에 나온 다른 방법은 타도 메인에서 쿠키를 포함해서 요청한 것에 대한 응답은 * 못쓰도록 했다. ACAC 이게 true로 설정이 됐다면 그러니까 쿠키를 포함해서 요청한 것에 대한 응답이 true라면 *를 사용하지 못하도록 했다.
그런데 개발자들은 이것도 불편해서 요청 origin에 있는 응답 origin에 그대로 넣어서 응답하게 개발을 했다 이렇게 개발을 하면 사실상 처음으로 돌아가 SOP 가 있으나 마나 한 것이 되어버렸다.
CSRF와 SOP / CORS
그래서 CSRF 공격이 만약 POST 방식으로 만 공격 가능하다고 할 때 SOP / CORS 가 위의 설명처럼 동작한다면 피해자 서버에서 XSS 취약점을 찾을 필요 없이 그냥 공격자 서버에서 공격이 가능하다.