Actualiza al SDK del navegador 4.34.0 o posterior para evitar vulnerabilidades de seguridad en la configuración de tu proxy.
Resumen
El SDK del navegador RUM se puede configurar para enviar solicitudes a través de un proxy. Cuando configuras el proxy parámetro de inicialización del SDK a una URL como https://www.example-proxy.com/any-endpoint, todos los datos RUM se envían a esa URL utilizando el método POST. Los datos RUM aún necesitan ser reenviados a Datadog desde el proxy.
Configuración previa del proxy
Para reenviar una solicitud a Datadog con éxito, tu proxy debe
- Construir la URL de ingesta de Datadog.
- Agregar un encabezado
X-Forwarded-Forque contenga la dirección IP del cliente de la solicitud para una geoIP precisa. - Reenviar la solicitud a la URL de ingesta de Datadog utilizando el método POST.
- Dejar el cuerpo de la solicitud sin cambios.
- Por razones de seguridad, elimina cualquier encabezado HTTP que potencialmente contenga información sensible, como el encabezado
cookie. - El cuerpo de la solicitud puede contener datos binarios y no debe ser convertido a una cadena. Asegúrate de que tu implementación de proxy reenvíe el cuerpo sin conversión.
- Asegúrate de que tu implementación de proxy no permita que un actor malicioso envíe solicitudes a un servidor diferente. Por ejemplo:
https://browser-intake-datadoghq.com.malicious.com.
Construye la URL de ingesta de Datadog
Tu URL de ingesta de Datadog debe tener el formato <INTAKE_ORIGIN>/<PATH><PARAMETERS> (por ejemplo, https://browser-intake-datadoghq.eu/api/v2/rum?ddsource=browser&...).
origen de ingesta | El origen de ingesta de Datadog corresponde a tu The intake origin for your Datadog site is The intake origin for your Datadog site is The intake origin for your Datadog site is The intake origin for your Datadog site is The intake origin for your Datadog site is The intake origin for your Datadog site is The intake origin for your Datadog site is The intake origin for your Datadog site is |
ruta | La ruta contiene la versión de la API y el producto (por ejemplo, The path for each request can be accessed in the request's |
| parámetros | Los parámetros de la solicitud (por ejemplo, ddsource=browser&...) pueden ser accedidos en el parámetro ddforward de la solicitud (por ejemplo, https://www.example-proxy.com/any-endpoint?ddforward=%2Fapi%2Fv2%2Frum%3Fddsource%3Dbrowser). |
Configuración del SDK
Configura la URL del proxy en el parámetro de inicialización 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>'
});
El SDK del navegador RUM agrega un parámetro de consulta ddforward a todas las solicitudes a tu proxy. Este parámetro de consulta contiene la ruta de la URL y los parámetros a los que todos los datos deben ser enviados.
Por ejemplo, con un site configurado en datadoghq.eu y un proxy configurado en https://example.org/datadog-intake-proxy, el SDK del navegador RUM envía solicitudes a una URL como esta: https://example.org/datadog-intake-proxy?ddforward=%2Fapi%2Fv2%2Frum%3Fddsource%3Dbrowser. El proxy reenvía la solicitud a https://browser-intake-datadoghq.eu/api/v2/rum?ddsource=browser.
Pasando una función al parámetro de inicialización proxy
El parámetro de inicialización proxy también admite una entrada de función. Esta función te permite tener más control sobre cómo se agregan la ruta y los parámetros a la URL del proxy.
Esta función recibe un objeto con las siguientes propiedades:
path: la ruta para las solicitudes de Datadog (ejemplo:/api/v2/rum)parameters: los parámetros de las solicitudes de Datadog (ejemplo: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}`
});
Nota:
- Algunos bloqueadores de privacidad ya apuntan a los patrones de URL de ingesta, así que puede que desees tener eso en cuenta al construir tu URL de proxy.
- La función
proxyse llama para cada solicitud, por lo que debe evitar cualquier cálculo pesado. - Las aplicaciones web JSP necesitan usar el carácter de escape
\para propagar correctamente estos parámetros al navegador. Por ejemplo:proxy: (options) => 'http://proxyURL:proxyPort\${options.path}?\${options.parameters}',
Antes de la versión 4.34.0 del SDK del navegador, se utilizaba el parámetro de inicialización proxyUrl, y el origen de ingesta de Datadog se incluía en el atributo ddforward. La implementación del proxy se encargaba de validar este host, y no hacerlo resultaba en diversas vulnerabilidades.
El origen de ingesta de Datadog debe definirse en tu implementación de proxy para garantizar la seguridad.
Para evitar vulnerabilidades de seguridad, actualiza al SDK del navegador 4.34.0 o posterior.
Further reading
Más enlaces, artículos y documentación útiles: