Présentation
L’intégration CSP (stratégie de sécurité du contenu) de Datadog permet de transmettre des logs à Datadog lorsque les navigateurs Web interprètent votre CSP et détectent des violations. Lorsque vous utilisez l’intégration CSP, vous n’avez pas besoin d’héberger ou de gérer un endpoint dédié pour agréger vos données CSP.
Pour en savoir plus sur les CSP, consultez l’article de Google sur web.dev.
Prérequis
Avant d’ajouter une directive à un en-tête CSP, générez un token client dans votre compte Datadog.
Pour des raisons de sécurité, vous devez utiliser un token client pour recueillir les logs des navigateurs Web. Vous ne pouvez pas utiliser les clés d'API Datadog pour configurer le SDK Datadog de collecte de logs à partir des navigateurs, car elles risqueraient d'être exposées côté client. Pour en savoir plus, consultez la
documentation dédiée aux tokens client.
Préparer une URL pour la CSP
Vous devez mettre en place une URL qui permettra aux navigateurs d’envoyer les violations de CSP détectées. L’URL doit respecter le format suivant :
https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=<token-client>&dd-evp-origin=content-security-policy&ddsource=csp-report
Si vous le souhaitez, ajoutez la clé ddtags
(nom du service, environnement et version du service) à l’URL pour configurer le tagging de service unifié :
env
: l’environnement de votre application.service
: le nom de service de votre application.version
: la version de votre application.
Pour bien formater les valeurs ddtags
, vous devez :
- Regrouper les clés et les valeurs avec un deux-points (
:
) - Concaténer les clés et les valeurs avec une virgule (
,
) - Encodage de l’URL
Par exemple, avec les paires key/value {"service": "billingService", "env": "production"}
, la chaîne d’URL encodée ressemblera à ceci :
service%3AbillingService%2Cenv%3Aproduction
Et l’URL finale avec les tags sera la suivante :
https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=<token-client>&dd-evp-origin=content-security-policy&ddsource=csp-report&ddtags=service%3AbillingService%2Cenv%3Aproduction
Ajouter l’URL à la CSP
Vous pouvez intégrer l’URL dans un en-tête HTTP (méthode recommandée) ou dans une balise HTML <meta>
.
Intégrer la CSP dans un en-tête HTTP
Datadog vous conseille d’intégrer la CSP dans un en-tête HTTP. Vous pouvez utiliser la directive report-uri
ou la directive report-to
. La directive report-to
est amenée à remplacer report-uri
, mais elle n’est pas encore prise en charge par tous les navigateurs.
Vous pouvez également intégrer l’URL dans une balise HTML <meta>
.
<meta http-equiv="Content-Security-Policy"
content="...; report-uri 'https://csp-report.browser-intake-datadoghq.com/api/v2/logs?dd-api-key=<token-client>&dd-evp-origin=content-security-policy&ddsource=csp-report'">
Exemples de signalements de violations
Chaque navigateur interprète le format de signalement différemment :
{
'csp-report': {
'blocked-uri': 'https://evil.com/malicious.js',
'document-uri': 'http://localhost:8000/',
'original-policy': 'script-src http://good.com; report-uri http://127.0.0.1:8000/csp_reports',
referrer: '',
'violated-directive': 'script-src'
}
}
{
'csp-report': {
'document-uri': 'http://localhost:8000/',
referrer: '',
'violated-directive': 'script-src-elem',
'effective-directive': 'script-src-elem',
'original-policy': 'trusted-types toto; script-src good.com; report-uri http://127.0.0.1:8000/csp_reports',
disposition: 'enforce',
'blocked-uri': 'https://evil.com/malicious.js',
'status-code': 200,
'script-sample': ''
}
}
{
'csp-report': {
'document-uri': 'http://localhost:8000/',
referrer: '',
'violated-directive': 'script-src good.com',
'effective-directive': 'script-src',
'original-policy': 'trusted-types toto; script-src good.com; report-uri http://127.0.0.1:8000/csp_reports',
'blocked-uri': 'https://evil.com',
'status-code': 200
}
}
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: