ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CORS와 SOP의 개념 및 구현 방법 이해하기
    아무거나 찌끄리기 2024. 8. 28. 18:04

    웹 애플리케이션의 보안과 데이터 공유는 현대의 웹 개발에서 중요한 주제이다. CORS와 SOP는 이러한 보안 문제를 다루기 위한 두 가지 주요 개념이다.

     

    - CORS란? (Cross-Origin Resource Sharing)

    CORS는 Cross-Origin Resource Sharing의 약자로, 웹 브라우저가 서로 다른 출처(도메인, 프로토콜, 포트)를 가진 서버와의 리소스 공유를 안전하게 수행할 수 있도록 하는 표준이다. 기본적으로, 웹 브라우저는 보안상의 이유로 한 출처에서 로드된 웹 페이지가 다른 출처의 리소스에 접근하는 것을 제한한다. CORS는 이러한 제한을 해제하고, 서버가 특정 출처에 대해 리소스 접근을 허용할 수 있게 한다.

     

    필요성

    • 보안: CORS는 웹 애플리케이션이 다른 도메인에서 데이터를 안전하게 요청하고 처리할 수 있도록 하며, 동시에 보안을 유지한다.
    • 데이터 공유: API나 리소스가 여러 도메인에서 사용되는 경우, CORS를 통해 해당 리소스에 접근할 수 있다.
    • 유연성: 서버가 특정 도메인에서의 접근을 허용하도록 설정함으로써, 다양한 클라이언트와 서버 간의 통신을 유연하게 설정할 수 있다.

    - SOP란? (Same-Origin Policy)

    SOP는 Same-Origin Policy의 약자로, 웹 브라우저에서 보안을 유지하기 위해 적용하는 기본 정책이다. 이 정책은 웹 페이지가 자신과 동일한 출처에서만 데이터를 요청하거나 조작할 수 있도록 제한한다. 출처는 도메인, 프로토콜, 포트를 포함한다.

     

    한계

    • 제한된 데이터 접근: SOP는 보안을 강화하지만, 다양한 도메인 간 데이터 공유가 필요한 현대의 웹 애플리케이션에서 유연성이 부족할 수 있다.
    • CORS 필요성: SOP의 제한 때문에, 외부 API나 다른 도메인에서의 리소스 접근이 필요할 때 CORS와 같은 기술이 필요하다.

    - CORS 작성 방법: CORS 헤더 설정 방법과 예제

    서버는 응답에 CORS 헤더를 추가하여 클라이언트가 다른 출처의 리소스에 접근할 수 있도록 허용한다. 주요 CORS 헤더와 설정 방법은 다음과 같다.

     

    헤더예제

    1. Access-Control-Allow-Origin

    클라이언트가 접근할 수 있는 출처를 지정한다.

    Access-Control-Allow-Origin: https://example.com

     

    2. Access-Control-Allow-Methods

    허용된 HTTP 메서드를 지정한다.

    Access-Control-Allow-Methods: GET, POST, PUT, DELETE

     

    3. Access-Control-Allow-Headers

    클라이언트가 요청 시 사용할 수 있는 헤더를 지정한다.

    Access-Control-Allow-Headers: Content-Type, Authorization

     

    4. Access-Control-Allow-Credentials

    자격 증명(예: 쿠키)을 포함할 수 있는지 여부를 지정한다.

    Access-Control-Allow-Credentials: true

     

    5. Access-Control-Expose-Headers

    클라이언트가 접근할 수 있는 응답 헤더를 지정한다.

    Access-Control-Expose-Headers: X-Custom-Header

     

     

     

    6. Access-Control-Max-Age

    preflight 요청의 결과를 캐시할 수 있는 시간(초)을 지정한다.

    Access-Control-Max-Age: 3600

     

    서버 측 설정 예제 -  Express.js(Node.js) 예제 

    const express = require('express');
    const app = express();
    const cors = require('cors');
    
    app.use(cors({
      origin: 'https://example.com',
      methods: ['GET', 'POST'],
      allowedHeaders: ['Content-Type', 'Authorization'],
      credentials: true
    }));
    
    app.get('/data', (req, res) => {
      res.json({ message: 'Hello World' });
    });
    
    app.listen(3000, () => {
      console.log('Server running on port 3000');
    });

     

    - CORS 작동 방식: 브라우저에서 CORS가 어떻게 작동하는지

    1. 클라이언트 요청

    • 브라우저가 다른 출처의 리소스를 요청할 때, 특히 GET, POST 등의 요청을 보낼 때, 브라우저는 CORS 정책을 적용한다.

    2. Preflight 요청 (옵션)

    • 상황: PUT, DELETE와 같은 비표준 메서드나 커스텀 헤더를 사용하는 경우.
    • 동작: 브라우저는 OPTIONS 메서드를 사용하여 서버에 preflight 요청을 보내고, 서버가 CORS 정책을 지원하는지 확인한다.
    // 헤더
    OPTIONS /resource HTTP/1.1
    Host: example.com
    Origin: https://mywebsite.com
    Access-Control-Request-Method: POST

     

    3. 서버 응답

    • 서버는 응답 헤더에 CORS 정책을 포함하여 클라이언트가 요청한 출처의 접근을 허용한다.
    // 예제
    HTTP/1.1 200 OK
    Access-Control-Allow-Origin: https://mywebsite.com
    Access-Control-Allow-Methods: POST, GET

     

     

    4. 브라우저의 데이터 처리

    • 브라우저는 서버의 응답을 기반으로 요청이 허용되었는지 확인하고, 데이터가 클라이언트 애플리케이션에 전달된다.

    5. 응답 캐시

    • Access-Control-Max-Age 헤더가 설정된 경우, 브라우저는 preflight 요청의 결과를 캐시하고, 같은 요청이 다시 발생할 때 preflight 요청을 생략한다.

    이렇게 CORS와 SOP는 웹 애플리케이션의 보안을 강화하고, 다양한 도메인 간의 데이터 공유를 안전하게 관리할 수 있도록 도와준다.

     

    '아무거나 찌끄리기' 카테고리의 다른 글

    ORM/Prisma/3Tier 개념  (0) 2024.09.09
    OAuth2.0의 개념  (0) 2024.09.04
    HTTP와 HTTPS의 차이점과 보안 메커니즘 이해하기  (0) 2024.08.28
    네트워크의 기본 구조와 개념 이해하기  (0) 2024.08.28
    Next.js  (0) 2024.08.21
Designed by Tistory.