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 sert 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.

Directives CSP

Les directives CSP suivantes servent à contrôler quelles ressources peuvent être chargées :
  • script-src : Détermine quels scripts peuvent être exécutés
  • style-src : Détermine quelles feuilles de style peuvent être chargées
  • font-src : Détermine quelles polices peuvent être chargées
  • img-src : Détermine quelles images, icônes et logos peuvent être chargés
  • connect-src : Détermine quelles URL peuvent être contactées pour les appels d’API et les connexions WebSocket
  • frame-src : Détermine quelles URL peuvent être intégrées dans des cadres ou des iframes
  • default-src : Valeur de repli pour les autres directives lorsqu’elles ne sont pas définies explicitement

Liste d’autorisation des domaines

DomaineFinalitéDirective CSPObligatoire
d4tuoctqmanu0.cloudfront.netCSS et polices KaTeXstyle-src, font-srcObligatoire
*.mintlify.devContenu de la documentationconnect-srcObligatoire
d3gk2c5xim1je2.cloudfront.netIcônes, images, logosimg-srcObligatoire
www.googletagmanager.comGoogle Analytics/GTMscript-src, connect-srcFacultatif
cdn.segment.comAnalytics Segmentscript-src, connect-srcFacultatif
plausible.ioAnalytics Plausiblescript-src, connect-srcFacultatif
tag.clearbitscripts.comSuivi Clearbitscript-srcFacultatif
cdn.heapanalytics.comAnalytics Heapscript-srcFacultatif
chat.cdn-plain.comWidget de chat Plainscript-srcFacultatif
chat-assets.frontapp.comWidget de chat Frontscript-srcFacultatif

Exemple de configuration CSP

Incluez uniquement les domaines des services que vous utilisez. Supprimez tous les domaines d’analytics que vous n’avez pas configurés pour votre documentation.
Content-Security-Policy:
default-src 'self';
script-src 'self' 'unsafe-inline' 'unsafe-eval' www.googletagmanager.com cdn.segment.com plausible.io tag.clearbitscripts.com cdn.heapanalytics.com
chat.cdn-plain.com chat-assets.frontapp.com;
style-src 'self' 'unsafe-inline' d4tuoctqmanu0.cloudfront.net;
font-src 'self' d4tuoctqmanu0.cloudfront.net;
img-src 'self' data: blob: d3gk2c5xim1je2.cloudfront.net;
connect-src 'self' *.mintlify.dev www.googletagmanager.com cdn.segment.com plausible.io;
frame-src 'self' *.mintlify.dev;

Configurations courantes selon le type de proxy

La plupart des proxies inverses prennent en charge l’ajout d’en-têtes personnalisés.

Configuration Cloudflare

Créez une règle de transformation des en-têtes de réponse :
  1. Dans votre tableau de bord Cloudflare, accédez à Rules > Overview.
  2. Sélectionnez Create rule > Response Header Transform Rule.
  3. 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'; style-src 'self' 'unsafe-inline' d4tuoctqmanu0.cloudfront.net; font-src 'self' d4tuoctqmanu0.cloudfront.net; img-src 'self' data: blob: d3gk2c5xim1je2.cloudfront.net; connect-src 'self' *.mintlify.dev; frame-src 'self' *.mintlify.dev;
      
  1. 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'; style-src 'self' 'unsafe-inline' d4tuoctqmanu0.cloudfront.net; font-src 'self' d4tuoctqmanu0.cloudfront.net; img-src 'self' data: blob: d3gk2c5xim1je2.cloudfront.net; connect-src 'self' *.mintlify.dev; frame-src 'self' *.mintlify.dev;",
        "Override": true
        }
      }
    }
  }
}

Configuration de Vercel

Ajoutez ceci à votre vercel.json :
{
"headers": [
    {
    "source": "/(.*)",
    "headers": [
        {
        "key": "Content-Security-Policy",
        "value": "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline' d4tuoctqmanu0.cloudfront.net; font-src 'self' d4tuoctqmanu0.cloudfront.net; img-src 'self' data: blob: d3gk2c5xim1je2.cloudfront.net; connect-src 'self' *.mintlify.dev; frame-src 'self' *.mintlify.dev;"
        }
      ]
    }
  ]
}

Dépannage

Identifiez les violations de la CSP dans la console de votre navigateur :
  1. Ouvrez les outils de développement de votre navigateur.
  2. Accédez à l’onglet Console.
  3. Recherchez des 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