La Content Security Policy (CSP) est une norme de sécurité qui aide à prévenir les attaques de cross-site scripting (XSS) en contrôlant les ressources qu’une page web est autorisée à charger. Mintlify fournit une CSP par défaut qui protège la plupart des sites. Si vous hébergez votre documentation derrière un reverse proxy ou un pare-feu qui remplace la CSP par défaut, vous devrez peut-être configurer les en-têtes CSP pour que les fonctionnalités fonctionnent correctement.
Les directives CSP suivantes permettent de contrôler quelles ressources peuvent être chargées :
script-src
: contrôle quels scripts peuvent être exécutés
style-src
: contrôle quelles feuilles de style peuvent être chargées
font-src
: contrôle quelles polices peuvent être chargées
img-src
: contrôle quelles images, icônes et logos peuvent être chargés
connect-src
: contrôle quelles URL peuvent être utilisées pour les appels à l’API et les connexions WebSocket
frame-src
: contrôle quelles URL peuvent être intégrées dans des frames ou iframes
default-src
: valeur de repli pour les autres directives lorsqu’elles ne sont pas explicitement définies
Liste blanche de domaines
Domaine | Finalité | Directive CSP | Obligatoire |
---|
d4tuoctqmanu0.cloudfront.net | CSS et polices KaTeX | style-src , font-src | Obligatoire |
*.mintlify.dev | Contenu de la documentation | connect-src , frame-src | Obligatoire |
*.mintlify.com | Dashboard, API, proxy Analytics | connect-src | Obligatoire |
leaves.mintlify.com | API de l’Assistant | connect-src | Obligatoire |
d3gk2c5xim1je2.cloudfront.net | Icônes, images, logos | img-src | Obligatoire |
d1ctpt7j8wusba.cloudfront.net | Fichiers de version et de publication Mint | connect-src | Obligatoire |
mintcdn.com | Images, favicons | img-src , connect-src | Obligatoire |
*.mintcdn.com | Images, favicons | img-src , connect-src | Obligatoire |
api.mintlifytrieve.com | API de recherche | connect-src | Obligatoire |
cdn.jsdelivr.net | Ressources d’émojis pour les images OG | script-src , img-src | Obligatoire |
fonts.googleapis.com | Google Fonts | style-src , font-src | Optionnel |
www.googletagmanager.com | Google Analytics/GTM | script-src , connect-src | Optionnel |
cdn.segment.com | Segment Analytics | script-src , connect-src | Optionnel |
plausible.io | Plausible Analytics | script-src , connect-src | Optionnel |
us.posthog.com | PostHog Analytics | connect-src | Optionnel |
cdn.getkoala.com | Koala Analytics | script-src | Optionnel |
tag.clearbitscripts.com | Suivi Clearbit | script-src | Optionnel |
cdn.heapanalytics.com | Heap Analytics | script-src | Optionnel |
chat.cdn-plain.com | Widget de chat Plain | script-src | Optionnel |
chat-assets.frontapp.com | Widget de chat Front | script-src | Optionnel |
browser.sentry-cdn.com | Suivi des erreurs Sentry | script-src , connect-src | Optionnel |
js.sentry-cdn.com | SDK JavaScript Sentry | script-src | Optionnel |
Exemple de configuration CSP
Incluez uniquement les domains des services que vous utilisez. Supprimez tout domain Analytics que vous n’avez pas configuré pour votre documentation.
Content-Security-Policy:
default-src 'self';
script-src 'self' 'unsafe-inline' 'unsafe-eval' cdn.jsdelivr.net www.googletagmanager.com cdn.segment.com plausible.io
us.posthog.com cdn.getkoala.com tag.clearbitscripts.com cdn.heapanalytics.com chat.cdn-plain.com chat-assets.frontapp.com
browser.sentry-cdn.com js.sentry-cdn.com;
style-src 'self' 'unsafe-inline' d4tuoctqmanu0.cloudfront.net fonts.googleapis.com;
font-src 'self' d4tuoctqmanu0.cloudfront.net fonts.googleapis.com;
img-src 'self' data: blob: d3gk2c5xim1je2.cloudfront.net mintcdn.com *.mintcdn.com cdn.jsdelivr.net;
connect-src 'self' *.mintlify.dev *.mintlify.com d1ctpt7j8wusba.cloudfront.net mintcdn.com *.mintcdn.com
api.mintlifytrieve.com www.googletagmanager.com cdn.segment.com plausible.io us.posthog.com browser.sentry-cdn.com;
frame-src 'self' *.mintlify.dev;
Configurations courantes selon le type de proxy
La plupart des proxies inverseurs prennent en charge l’ajout d’en-têtes personnalisés.
Configuration de Cloudflare
Créez une règle de transformation des en-têtes de réponse :
- Dans votre Dashboard Cloudflare, accédez à Rules > Overview.
- Sélectionnez Create rule > Response Header Transform Rule.
- Configurez la règle :
- Modify response header: Set static
- Header name:
Content-Security-Policy
- Header value:
default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' d4tuoctqmanu0.cloudfront.net fonts.googleapis.com; font-src 'self' d4tuoctqmanu0.cloudfront.net fonts.googleapis.com; img-src 'self' data: blob: d3gk2c5xim1je2.cloudfront.net mintcdn.com *.mintcdn.com cdn.jsdelivr.net; connect-src 'self' *.mintlify.dev *.mintlify.com d1ctpt7j8wusba.cloudfront.net mintcdn.com *.mintcdn.com api.mintlifytrieve.com; frame-src 'self' *.mintlify.dev;
- Déployez la règle.
Configuration de AWS CloudFront
Ajoutez une stratégie d’en-têtes de réponse dans CloudFront :
{
"ResponseHeadersPolicy": {
"Name": "MintlifyCSP",
"Config": {
"SecurityHeadersConfig": {
"ContentSecurityPolicy": {
"ContentSecurityPolicy": "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' d4tuoctqmanu0.cloudfront.net fonts.googleapis.com; font-src 'self' d4tuoctqmanu0.cloudfront.net fonts.googleapis.com; img-src 'self' data: blob: d3gk2c5xim1je2.cloudfront.net mintcdn.com *.mintcdn.com cdn.jsdelivr.net; connect-src 'self' *.mintlify.dev *.mintlify.com d1ctpt7j8wusba.cloudfront.net mintcdn.com *.mintcdn.com api.mintlifytrieve.com; frame-src 'self' *.mintlify.dev;",
"Override": true
}
}
}
}
}
Ajoutez ceci à votre vercel.json
:
{
"headers": [
{
"source": "/(.*)",
"headers": [
{
"key": "Content-Security-Policy",
"value": "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' d4tuoctqmanu0.cloudfront.net fonts.googleapis.com; font-src 'self' d4tuoctqmanu0.cloudfront.net fonts.googleapis.com; img-src 'self' data: blob: d3gk2c5xim1je2.cloudfront.net mintcdn.com *.mintcdn.com cdn.jsdelivr.net; connect-src 'self' *.mintlify.dev *.mintlify.com d1ctpt7j8wusba.cloudfront.net mintcdn.com *.mintcdn.com api.mintlifytrieve.com; frame-src 'self' *.mintlify.dev;"
}
]
}
]
}
Identifiez les violations de la CSP dans la console de votre navigateur :
- Ouvrez les outils de développement de votre navigateur.
- Accédez à l’onglet Console.
- Recherchez les erreurs commençant par :
Content Security Policy: The page's settings blocked the loading of a resource
Refused to load the script/stylesheet because it violates the following Content Security Policy directive
Refused to connect to because it violates the following Content Security Policy directive