XSS 공격 방식의 예를 살펴보자
일반 사용자A 가 상품 리뷰를 남기기 위해 리뷰 페이지에 접속했다고 가정하자.
그런데, 해당 리뷰 페이지는 어떤 악성 해커에 의해 감염되어 있는 상태이다.
<script>alert("you are hacked!")</script>
친절해요!! 라는 스크립트를 심어둔 리뷰를 작성해 서버에 요청한다.이러한 과정으로 악성 스크립트가 실행되며 해커는 사용자A의 쿠키, 세션 정보등을 탈취할 수 있다.
여기서 CORS 정책의 개념은 등장하지 않는다.
그렇다면 CORS 정책이 존재하지 않는다면 XSS 공격 방법으로 사용자의 정보를 탈취하기가 너무나도 쉬워진다는게 무슨뜻일까?
이건, 아래와 같은 상황의 얘기이다.
<script>
fetch('http://google.com').then(/**/)
... // 이 후 해커의 pc로 데이터 전송
</script>
이번엔 악성 해커가 만든 피싱 웹사이트로 예를 들어보자.
http://fishing.com
에서 http://google.com
으로 요청이 전송된다.google.com
서버는 요청에 대한 응답을 정상적으로 전송한다.Access-Control-Allow-Origin
헤더에 http://fishing.com
이 존재하지 않고, http://google.com
이 아니므로, 해당 응답을 웹브라우저로 받지 않고 버려버린다.CORS 정책이 존재하지 않았다면, 웹브라우저에 google.com
서버의 응답 결과가 내려오며, 사용자A는 피싱 웹사이트에 접속하는 것 만으로 개인정보 등을 쉽게 탈취 당할 수 있는 것이다.
이러한 정책으로 인해 Case2와 같은 무분별한 공격을 방어할 수 있다.
(Case1의 경우, 서버에서 XSS 공격 방지 처리가 필요하다.)
하지만, 요청은 얼마든지 변조 될 수 있기 때문에 CORS 정책이 존재한다해서 XSS 공격을 근본적으로 차단할 수 있는 것은 아니다.
참고 : https://evan-moon.github.io/2020/05/21/about-cors/ |
https://tofusand-dev.tistory.com/92 |
https://velog.io/@hunjison/SOP-CORS%EB%8A%94-%EB%B3%B4%EC%95%88%EC%97%90%EC%84%9C-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%A0%EA%B9%8C