SDK source

SDK version

SDK source

SDK version


프록시 구성의 보안 취약성을 피하려면 브라우저 SDK 4.34.0 이후 버전으로 업그레이드하세요.

개요

프록시를 통해 요청을 보내도록 RUM 브라우저 SDK를 구성할 수 있습니다. SDK의 proxy 초기화 파라미터https://www.example-proxy.com/any-endpoint와 같은 URL로 설정하면 모든 RUM 데이터가 POST 메서드를 사용해 해당 URL로 전송됩니다. 그래도 RUM 데이터를 프록시에서 Datadog으로 전달해야 하기는 마찬가지입니다.

프록시 설정 전제 조건

Datadog에 요청을 전달하려면 프록시가 충족해야 하는 조건

  1. Datadog 인테이크 URL을 구축합니다.
  2. 정확한 geoIP에 해당하는 클라이언트 IP 주소를 포함한 X-Forwarded-For 헤더를 추가합니다.
  3. POST 메서드를 사용하여 요청을 Datadog 인테이크 URL로 전달합니다.
  4. 요청 본문은 변경하지 말고 그대로 둡니다.
  • 보안상의 이유로, cookie 헤더와 같은 민감한 정보를 포함할 가능성이 있는 HTTP 헤더는 모두 제거합니다.
  • 요청 본문은 바이너리 데이터를 포함할 수 있으며 문자열로 변환하면 안 됩니다. 프록시 구현이 변환 없이 원시 본문을 전달해야 합니다.
  • 프록시 구현이 악성 행위자가 요청을 다른 서버로 보내지 못하도록 해야 합니다. 예: https://browser-intake-datadoghq.com.malicious.com.

Datadog 인테이크 URL 구축

Datadog 인테이크 URL의 형식은 <INTAKE_ORIGIN>/<PATH><PARAMETERS>여야 합니다(예: https://browser-intake-datadoghq.eu/api/v2/rum?ddsource=browser&...).

인테이크 출처

Datadog 인테이크 출처는 site 초기화 파라미터에 해당합니다. 프록시 구현에 사이트 파라미터에 해당하는 Datadog 인테이크 출처를 정의해야 합니다.

The intake origin for your Datadog site is https://browser-intake-datadoghq.com.

The intake origin for your Datadog site is https://browser-intake-us3-datadoghq.com.

The intake origin for your Datadog site is https://browser-intake-us5-datadoghq.com.

The intake origin for your Datadog site is https://browser-intake-datadoghq.eu.

The intake origin for your Datadog site is https://browser-intake-ap1-datadoghq.com.

The intake origin for your Datadog site is https://browser-intake-ap2-datadoghq.com.

The intake origin for your Datadog site is https://browser-intake-ddog-gov.com.

The intake origin for your Datadog site is https://browser-intake-us2-ddog-gov.com.

경로

경로는 API 버전 및 제품을 포함합니다(예를 들어 RUM 데이터인 경우 /api/v2/rum, 세션 리플레이 데이터인 경우 /api/v2/replay).

The path for each request can be accessed in the request's ddforward parameter (for example, https://www.example-proxy.com/any-endpoint?ddforward=%2Fapi%2Fv2%2Frum%3Fddsource%3Dbrowser).

파라미터요청의 ddforward 파라미터(예: https://www.example-proxy.com/any-endpoint?ddforward=%2Fapi%2Fv2%2Frum%3Fddsource%3Dbrowser)에서 요청 파라미터(예: ddsource=browser&...)에 액세스할 수 있습니다.

SDK 설정

proxy 초기화 파라미터에서 프록시의 URL 구성:

import { Datacenter, datadogRum } from '@datadog/browser-rum';

datadogRum.init({
    applicationId: '<DATADOG_APPLICATION_ID>',
    clientToken: '<DATADOG_CLIENT_TOKEN>',
    site: '',
    proxy: '<YOUR_PROXY_URL>',
});
window.DD_RUM.onReady(function() {
    window.DD_RUM.init({
        clientToken: '<CLIENT_TOKEN>',
        applicationId: '<APPLICATION_ID>',
        proxy: '<YOUR_PROXY_URL>',
    });
});
window.DD_RUM &&
    window.DD_RUM.init({
        clientToken: '<CLIENT_TOKEN>',
        applicationId: '<APPLICATION_ID>',
        proxy: '<YOUR_PROXY_URL>'
    });

RUM 브라우저 SDK가 프록시에 대한 모든 요청에 ddforward 쿼리 파라미터를 추가합니다. 이 쿼리 파라미터는 URL 경로와 모든 데이터를 전달받아야 하는 파라미터를 포함합니다.

예를 들어 sitedatadoghq.eu로 설정되고 proxyhttps://example.org/datadog-intake-proxy로 설정된 경우, RUM 브라우저 SDK는 https://example.org/datadog-intake-proxy?ddforward=%2Fapi%2Fv2%2Frum%3Fddsource%3Dbrowser와 같은 URL로 요청을 보냅니다. 프록시는 해당 요청을 https://browser-intake-datadoghq.eu/api/v2/rum?ddsource=browser로 전달합니다.

함수를 proxy 초기화 파라미터 에 전달

proxy 초기화 파라미터는 함수 입력도 지원합니다. 이 함수를 사용하면 프록시 URL에 경로와 파라미터를 추가하는 방식을 사용자가 더 주도적으로 제어할 수 있습니다.

이 함수는 다음과 같은 속성을 포함한 개체를 수신합니다.

  • path: Datadog 요청에 사용할 경로(예: /api/v2/rum)
  • parameters:Datadog 요청의 파라미터(예: ddsource=browser&...)
import { Datacenter, datadogRum } from '@datadog/browser-rum';

datadogRum.init({
    applicationId: '<DATADOG_APPLICATION_ID>',
    clientToken: '<DATADOG_CLIENT_TOKEN>',
    site: '',
    proxy: (options) => `https://www.proxy.com/foo${options.path}/bar?${options.parameters}`,
});
window.DD_RUM.onReady(function() {
    window.DD_RUM.init({
        clientToken: '<CLIENT_TOKEN>',
        applicationId: '<APPLICATION_ID>',
        proxy: (options) => `https://www.proxy.com/foo${options.path}/bar?${options.parameters}`,
    })
})
window.DD_RUM &&
    window.DD_RUM.init({
        clientToken: '<CLIENT_TOKEN>',
        applicationId: '<APPLICATION_ID>',
        proxy: (options) => `https://www.proxy.com/foo${options.path}/bar?${options.parameters}`
    });

참고:

  • 일부 개인정보 보호 차단기는 이미 인테이크 URL 패턴을 대상으로 지정하므로, 프록시 URL을 구축할 때 이 점을 고려하는 것이 좋습니다.
  • 각 요청에 대하여 proxy 함수를 호출하므로, 복잡한 계산을 피해야 합니다.
  • JSP 웹 애플리케이션\ 이스케이프 문자를 사용해야 이러한 파라미터를 브라우저에 적절하게 전파할 수 있습니다. 예:
    proxy: (options) => 'http://proxyURL:proxyPort\${options.path}?\${options.parameters}',
    

브라우저 SDK v4.34.0 전에는 proxyUrl 초기화 파라미터가 사용되었으며, Datadog 인테이크 출처는 ddforward 속성에 포함되었습니다. 이 호스트를 검증할 책임은 프록시 구현이 담당했으며, 검증이 실패하면 다양한 취약성이 발생했습니다.

Datadog 인테이크 출처를 프록시 구현에서 정의해야 보안이 보장됩니다.

보안 취약성을 피하려면 브라우저 SDK 4.34.0 이후 버전으로 업그레이드해야 합니다.

Further reading

추가 유용한 문서, 링크 및 기사: