본문 바로가기

WEB

CORS 개념, 공격 시나리오 ( + XSS 와의 차이 )

📌 쉽게 정리해보기

  • CORS: 브라우저가 다른 출처에 접근할 수 있는지를 제어하는 정책 (브라우저 보호)
    • cors(cross origin resource sharing) 은 다른 서버(url)에서 재료를 가져와 사용할 때 필요한 보안 정책이다.
    • 서버(url)로 표기 했지만 정확히는 origin(출처)라고 하며, 통신방식(http/https) + 주소(domain/IPaddr) + 포트(8080)를 합쳐서 origin(출처)라고 한다. 
    • 에러의 판단은 브라우저가 요청과 응답 내용을 비교하여 판단한다.
    • 브라우저가 오류를 확인하는 방법은, 서버에 재료를 요청할 때 보낸 자신의 origin이 서버가 반환한 응답 속에 허용 리스트에 있는지 여부로 판단한다.
    • 요청할 때 origin과 응답의 허용 origin 리스트는 요청/응답 header 속에 포함되어있다.
  • XSS: 브라우저가 악성 스크립트를 실행하지 못하게 막는 공격 방어 (사용자 보호)
    • xss (cross site scripting)은 해커가 특정 사이트 안에 자신의 코드를 심어 원하는 정보를 강제로 탈취하는 것이다. 
    • 사이트의 입력창을 이용하여 js 스크립트를 넣어 고객 정보 혹은 DB에 보관된 비밀 정보를 탈취하는 형태가 많다.
    • 스크립트를 넣기 위해서는 태그 형태의 입력이 많으므로, 입력된 내용이 예상되는 형태(문자열/숫자 등)가 맞는지 검증하는 것으로 공격을 방지한다.

 

✅ 1. CORS (Cross-Origin Resource Sharing)

🔹 개념

CORS는 다른 출처(origin) 간에 리소스를 요청할 때, 브라우저가 이를 허용할지 말지를 결정하는 정책입니다.
브라우저는 보안상, 스크립트가 자기 출처(origin) 이외의 API나 리소스를 요청하는 것을 제한합니다.

출처(origin): 프로토콜 + 도메인 + 포트
예: https://example.com:443

🔹 예상 공격 시나리오

1. 공격자가 자신의 사이트 evil.com에 사용자 A를 접속시킴
2. evil.com에서 JavaScript가 `https://bank.com/account`에 요청 시도
3. CORS 정책에 의해 bank.com에서 `Access-Control-Allow-Origin: evil.com` 없으면 브라우저가 차단 → 보안 유지

✅ 2. XSS (Cross-Site Scripting)

🔹 개념

XSS는 웹 페이지에 악성 스크립트를 삽입하고, 그것이 브라우저에서 실행되게 하여 정보를 훔치거나 조작하는 공격입니다.

🔹 예상 공격 시나리오

1. 웹사이트에 댓글 기능이 있음
2. 사용자가 댓글에 <script>alert('Hacked')</script> 삽입
3. 이 댓글이 필터 없이 출력됨
4. 다른 사용자가 해당 페이지를 열면 script가 실행 → 세션 탈취, 쿠키 탈취 등 가능

🔍 CORS vs XSS 차이 정리

 

구분 CORS XSS
의미 교차 출처 리소스 요청 보안 정책 악성 스크립트를 삽입하고 실행시키는 공격
방어 대상 브라우저가 API 요청을 허용할지 판단 악성 코드 실행 자체 방지
작동 위치 브라우저가 정책 적용 브라우저가 악성 코드 실행
공격 방식 브라우저가 타 사이트 리소스를 요청함 사용자가 열람 중인 페이지에 코드 삽입
대응 방식 서버에서 Access-Control-Allow-Origin 설정 입력값 필터링, CSP, escaping 등
     
공격자 조건 악성 JavaScript가 외부 출처 요청 사용자가 악성 스크립트가 포함된 페이지 열람

 

 

 

---

참고 출처

1. CORS 개념

https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-CORS-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-%F0%9F%91%8F