CORS 설명 - 출처 간 리소스 공유

내용물


  • Intro
  • Access-Control Headers
  • Rate Limiting
  • Summary

  • 소개

    Continuing on from my previous blog about website security week , 웹에서 CORS에 대해 이야기하겠습니다.

    CORS is Cross-origin Resource Sharing 이것은 웹 사이트가 API와 별도로 호스팅될 때 자주 사용됩니다. 예를 들어 웹사이트가 website.com에 있고 api.com에서 API를 호출합니다.
    이는 각 API와 웹사이트가 독립적으로 더 빠르게 이동할 수 있도록 하는 일반적인 아키텍처 패턴이지만 몇 가지 보안 문제가 발생할 수 있습니다.

    액세스 제어 헤더

    To allow CORS requests your API will need to response with certain headers, which allow certain behaviors from your website/frontend.

    접근-제어-허용-원점



    This header은 API를 호출할 origin 중 하나로 설정할 수 있으며 단일 출처만 될 수 있습니다.
    그렇지 않으면 *가 될 수 있지만 자격 증명을 전달할 수 없습니다. 이에 대해서는 나중에 설명하겠습니다.

    가능하면 특정 출처를 * 로 설정하는 것을 선호합니다.

    사용 예:

    Access-Control-Allow-Origin: https://mozilla.org

    액세스 제어 허용 방법



    This header은 API에 연결하는 데 사용할 수 있는 HTTP 메서드 목록으로 설정할 수 있습니다.

    일반적으로 OPTIONS는 모든 프론트엔드가 실제 요청을 하기 전에 종종 preflight 요청이라고 하는 OPTIONS 요청을 하기 때문에 이 목록의 일부가 되기를 원할 것입니다. GET 요청에 대해 OPTIONS 요청이 이루어지지 않습니다.
    *일 수도 있지만 가능하면 구체적이어야 합니다.

    사용 예:

    Access-Control-Allow-Methods: POST, GET, OPTIONS

    액세스 제어 최대 연령



    This header 프론트엔드가 실행 전 OPTIONS 요청을 캐시하는 기간으로 설정할 수 있습니다. 초 단위 값입니다. 예를 들어 86400초는 24시간입니다.

    Max-Age를 위와 같이 설정했다고 가정해 보겠습니다. 이는 프론트엔드에서 API로 보내는 첫 번째 요청이 OPTIONS 요청을 만든 다음 실제 요청을 수행함을 의미합니다. 이후 24시간 동안 해당 API에 다른 OPTIONS 요청을 할 필요가 없습니다.

    사용 예:

    Access-Control-Max-Age: 86400

    액세스 제어 허용 헤더



    This header은 API에 전달할 수 있는 헤더 목록으로 설정할 수 있습니다.

    사용 예:

    Access-Control-Allow-Headers: X-PINGOTHER, Content-Type

    액세스 제어 허용 자격 증명



    This header 요청에 자격 증명을 포함할지 여부를 지정합니다. 자격 증명은 쿠키, 권한 부여 헤더 또는 TLS 클라이언트 인증서로 계산됩니다.

    사용 예:

    Access-Control-Allow-Credentials: true

    속도 제한

    You should note that Access-Control-Allow-Origin header only prevents browsers from making requests to the API. It does not prevent calls to your API from other machines, command line, Postman etc.
    You should ensure that you have put other security measures in place to prevent misuse of your API, including Authentication and Rate Limiting.

    Rate Limiting involves restricting too many calls being made to your API. It can be done in a number of ways depending on how your API is developed. I would look for libraries to help manage this for you.

    요약

    In summary, separating your API and website can produce real development benefits however it can introduce security problems and having to deal with CORS.
    Hopefully this helps clarify CORS and how you can secure it.

    Set those headers now!

    Happy Building!

    좋은 웹페이지 즐겨찾기