SDK source

SDK version

SDK source

SDK version


Mettez à niveau vers le Browser SDK 4.34.0 ou une version ultérieure pour éviter les vulnérabilités de sécurité dans votre configuration de proxy.

Aperçu

Le RUM Browser SDK peut être configuré pour envoyer des requêtes via un proxy. Lorsque vous définissez le proxy paramètre d'initialisation du SDK sur une URL telle que https://www.example-proxy.com/any-endpoint, toutes les données RUM sont envoyées à cette URL en utilisant la méthode POST. Les données RUM doivent encore être transférées à Datadog depuis le proxy.

Configuration préalable du proxy

Pour transférer avec succès une requête à Datadog, votre proxy doit

  1. Construisez l'URL d'intégration de Datadog.
  2. Ajoutez un X-Forwarded-For en-tête contenant l'adresse IP du client de la requête pour un geoIP précis.
  3. Transférez la requête à l'URL d'intégration de Datadog en utilisant la méthode POST.
  4. Laissez le corps de la requête inchangé.
  • Pour des raisons de sécurité, supprimez tous les en-têtes HTTP qui pourraient contenir des informations sensibles, comme l'en-tête cookie.
  • Le corps de la requête peut contenir des données binaires et ne doit pas être converti en chaîne. Assurez-vous que votre implémentation de proxy transfère le corps brut sans conversion.
  • Assurez-vous que votre implémentation de proxy ne permet pas à un acteur malveillant d'envoyer des requêtes à un autre serveur. Par exemple : https://browser-intake-datadoghq.com.malicious.com.

Construisez l'URL d'intégration de Datadog

Votre URL d'intégration Datadog doit avoir le format <INTAKE_ORIGIN>/<PATH><PARAMETERS> (par exemple, https://browser-intake-datadoghq.eu/api/v2/rum?ddsource=browser&...).

origine d'entrée

L'origine d'entrée de Datadog correspond à votre site paramètre d'initialisation. L'origine d'entrée de Datadog correspondant à votre paramètre de site doit être définie dans votre implémentation de proxy.

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.

chemin

Le chemin contient la version de l'API et le produit (par exemple, /api/v2/rum pour les données RUM ou /api/v2/replay pour les données Session 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).

paramètresLes paramètres de la requête (par exemple, ddsource=browser&...) peuvent être accessibles dans le paramètre ddforward de la requête (par exemple, https://www.example-proxy.com/any-endpoint?ddforward=%2Fapi%2Fv2%2Frum%3Fddsource%3Dbrowser).

configuration du SDK

Configurez l'URL du proxy dans le paramètre d'initialisation proxy :

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>'
    });

Le RUM Browser SDK ajoute un paramètre de requête ddforward à toutes les requêtes vers votre proxy. Ce paramètre de requête contient le chemin et les paramètres de l'URL vers lesquels toutes les données doivent être transférées.

Par exemple, avec un site défini sur datadoghq.eu et un proxy défini sur https://example.org/datadog-intake-proxy, le RUM Browser SDK envoie des requêtes à une URL comme ceci : https://example.org/datadog-intake-proxy?ddforward=%2Fapi%2Fv2%2Frum%3Fddsource%3Dbrowser. Le proxy transfère la requête à https://browser-intake-datadoghq.eu/api/v2/rum?ddsource=browser.

Passer une fonction au paramètre d'initialisation proxy

Le paramètre d'initialisation proxy prend également en charge une entrée de fonction. Cette fonction vous permet d'avoir plus de contrôle sur la façon dont le chemin et les paramètres sont ajoutés à l'URL du proxy.

Cette fonction reçoit un objet avec les propriétés suivantes :

  • path : le chemin pour les requêtes Datadog (exemple : /api/v2/rum)
  • parameters : les paramètres des requêtes Datadog (exemple : 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}`
    });

Remarque :

  • Certains bloqueurs de confidentialité ciblent déjà les modèles d'URL d'entrée URL patterns, il est donc conseillé d'en tenir compte lors de la création de votre URL proxy.
  • La fonction proxy est appelée pour chaque requête, elle doit donc éviter tout calcul lourd.
  • Les applications web JSP doivent utiliser le caractère d'échappement \ pour propager correctement ces paramètres au navigateur. Exemple :
    proxy: (options) => 'http://proxyURL:proxyPort\${options.path}?\${options.parameters}',
    

Avant la version 4.34.0 du Browser SDK, le paramètre d'initialisation proxyUrl était utilisé, et l'origine d'entrée Datadog était incluse dans l'attribut ddforward. L'implémentation du proxy était chargée de valider cet hôte, et un échec à le faire entraînait diverses vulnérabilités.

L'origine d'entrée Datadog doit être définie dans votre implémentation de proxy pour garantir la sécurité.

Pour éviter les vulnérabilités de sécurité, vous devez mettre à niveau vers le Browser SDK 4.34.0 ou une version ultérieure.

Further reading

Documentation, liens et articles supplémentaires utiles: