プロキシ設定のセキュリティ脆弱性を回避するために、Browser SDK 4.34.0 以降にアップグレードしてください。
概要
RUM ブラウザ SDK は、プロキシを介してリクエストを送信するように構成できます。SDK の proxy 初期化パラメータ を https://www.example-proxy.com/any-endpoint のような URL に設定すると、すべての RUM データが POST メソッドを使用してその URL に送信されます。RUM データは、プロキシから Datadog に転送する必要があります。
前提条件プロキシ設定
リクエストを Datadog に正常に転送するには、プロキシが次の要件を満たしている必要があります。
- Datadog インテイク URL を構築します。
- 正確な geoIP のために、リクエストクライアント IP アドレスを含む
X-Forwarded-Forヘッダーを追加します。 - POST メソッドで Datadog インテーク URL にリクエストを転送します。
- リクエスト本文は変更しないでください。
- セキュリティ上の理由から、
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 インテイクオリジンは、あなたの 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 |
パス | パスには API バージョンと製品が含まれています (例えば、RUM データの場合は The path for each request can be accessed in the request's |
| パラメーター | リクエストパラメータ (例えば、ddsource=browser&...) は、リクエストの ddforward パラメータからアクセスできます (例えば、https://www.example-proxy.com/any-endpoint?ddforward=%2Fapi%2Fv2%2Frum%3Fddsource%3Dbrowser)。 |
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 Browser SDK は、すべてのリクエストに ddforward クエリパラメーターを追加します。このクエリパラメーターには、すべてのデータが転送されるべきURLパスとパラメーターが含まれています。
例えば、siteがdatadoghq.euに設定され、proxyがhttps://example.org/datadog-intake-proxyに設定されている場合、RUM Browser SDK は次のような URL にリクエストを送信します:https://example.org/datadog-intake-proxy?ddforward=%2Fapi%2Fv2%2Frum%3Fddsource%3Dbrowser。プロキシはリクエストを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}',
Browser SDK v4.34.0 より前は、proxyUrl 初期化パラメータが使用され、Datadog インテークオリジンは ddforward 属性に含まれていました。プロキシ実装はこのホストの検証を担当しており、これを行わないとさまざまな脆弱性が発生しました。
Datadog インテークオリジンは、セキュリティを確保するために、プロキシ実装で定義する必要があります。
セキュリティの脆弱性を避けるために、Browser SDK 4.34.0 以降にアップグレードする必要があります。
Further reading
お役に立つドキュメント、リンクや記事: