Day 34 [메인캠프 Section 17]

Cold_Rain·2024년 10월 26일

SeSAC - 프로그램🌱

목록 보기
11/13
post-thumbnail

1. CORS와 Proxy 서버

1-1. CORS와 Proxy 서버 이해

1 ) SOP(Same-Origin Policy)

  • SOP는 웹 브라우저의 보안을 강화하기 위해 만들어진 규칙이며, 다른 출처와의 접근을 제한하는 것이다.

  • 주 목적은 보안을 강화해서 서로 다른 웹사이트로 부터 데이터를 무분별하게 가져오는 것을 막아준다.

같은 출처? vs 다른 출처?

  • 출처가 같다는 것은 3가지가 일치해야 한다는 것!
  1. 프로토콜 (ex: http, https)
  2. 도메인 (ex: example.com)
  3. 포트 (ex: 80, 443)

예를 들어 이러한 경우를 예시로 들어 비교할 수 있다.
1. https://example.com === https://example.com:8080 => 포트가 달라 다른출처
2. https://example.com === http://example.com => 프로토콜이 달라 다른출처
3. https://example.com === https://sub.example.com => 도메인이 달라 다른출처

  • 이와 같은 이유로 좋은 점도 있지만 규칙이 엄격하기 때문에 유연하게 적용하는 경우로 만들어진 것들이 있다.(CORS)

2 ) CORS(Cross-Origin Resource Sharing)

  • 위에서 말했지만 SOP의 엄격한 규칙을 보완하고자 만들어졌다.
  • 특정 조건이 충족된다면 다른 출처에서도 데이터를 요청하고 응답 받을 수 있다.

Preflight Request / OPTIONS

  • Preflight Request(프리플라이트 요청)는 CORS 요청 중 안전하지 않은 요청을 하기 전에 브라우저가 미리 서버에게 허가를 받기 위해 보내는 요청이다.

  • 사전 확인을 위한 Preflight 요청은 OPTIONS 메서드로 이워잔다.

4 ) Proxy 서버

프록시-설명

  • 브라우저가 데이터를 요청 하기전 받을 수 있는 지 확인을 하기 위해 CORS를 보내는데 서버가 거절한다면
    브라우저 측에서 주지 않는다.

  • 이러한 문제를 보완하기 위해 Proxy 서버를 이용하게 되는데 이 것은 클라이언트와 서버 사이에 위치하여 중계 역할을 하는 보조 서버다.

1-2. CORS를 브라우저에서 차단하는 이유 (CSRF 공격 방지)

1 ) CSRF (Cross-Site Request Forgery)

  • 브라우저가 CORS를 보내는데 서버가 거절한다면
    서버가 거부해서 못하는 것이 아니라 브라우저가 주지 않는다. 이는 브라우저가 자신을 보호하기 위한 행동이다.

  • CSRF는 사용자가 신뢰하는 웹사이트에 대해 공격자가 위조된 요청을 전송하게 만들어, 사용자가 의도하지 않은 행동을 하도록 하는 웹 보안 공격이다.

2 ) 쿠키(Cookie)

  • 웹사이트가 사용자의 브라우저에 저장하는 작은 데이터 파일로, 웹사이트와 사용자 간의 상태를 유지하고 정보를 저장하는 데 사용된다.

쿠키 특징

  1. 클라이언트 측에 저장되어 동일한 웹 사이트에 접속할 때마다 해당 쿠키를 서버로 자동 전송함.

  2. 2가지 수명(세션쿠키, 영구쿠키)

    • 세션쿠키는 브라우저를 닫을 때 자동으로 삭제
    • 영구쿠키는 쿠키에 설정된 만료 시간까지 브라우저에 저장함.

CSRF 공격 동작 방식

  1. 사용자는 A사이트에 로그인을 해서 A사이트는 사용자의 세션을 유지하기 위해 쿠키를 사용.

  2. 공격자는 사용자에게 악성링크(이메일, 메세지, 피싱사이트)를 전달함.

  3. 사용자가 링크를 클릭하게 되면 브라우저는 사용자가 로그인한 A사이트에게 자동으로 요청을 전송함. 브라우저는 쿠키(사용자 인증 정보를 포함)를 A사이트에게 전송하기 때문에 A사이트는 이 요청이 유효한 사용자에게 온 것으로 착각해서 정상처리하게 됨.

  4. A사이트는 사용자가 보내지 않은 요청을 정상요청으로 받아들이고 공격자는 마음대로 사용하여 피해를 입히게 된다.(계정 수정, 금융 거래 등)

CSRF 공격 방어 방식

  1. CORS 차단: 다른 출처에서 오는 요청을 제한하여, 공격자가 임의의 웹사이트를 통해 악의적인 요청을 보내는 것을 방지

  2. CSRF 토큰 사용: CSRF 공격을 방지하기 위한 보안 매커니즘. CSRF 토큰을 사용하면 서버는 요청이 실제 사용자가 보낸건지 확인 할 수 있다.

CSRF 토큰 메커니즘

  1. 토큰생성: 사용자가 로그인하면 서버는 사용자에 대한 고유 CSRF 토큰을 생성한다.

  2. 이 토큰은 서버의 세션(서버가 사용자에 대한 정보를 저장하고 관리하는 방식)에 저장되어 클라이언트 에서도 사용하기 위해 HTML폼이나 HTTP헤더에 포함하여 전송함.

  3. 사용자가 웹에 폼을 제출할때 토큰도 함께 제출해야한다.

  4. 토큰과 함께 요청을 보낸다면 서버는 요청받은 토큰과 사용자 세션에 저장된 토큰을 비교한다. 이로써 일치하면 승인하고 일치하지 않다면 거부함.

profile
프로그래밍 공부하는 찬우입니다👋

0개의 댓글