内容安全策略(CSP)是一项安全标准,通过限制网页可加载的资源来帮助防止跨站脚本(XSS)攻击。Mintlify 提供了一个默认的 CSP,可保护大多数站点。如果你在反向代理或防火墙后托管文档,并且这些设备会覆盖默认的 CSP,则可能需要配置 CSP 响应头,才能确保各项功能正常运行。

CSP 指令

以下 CSP 指令用于控制可加载的资源:
  • script-src: 控制可执行的脚本
  • style-src: 控制可加载的样式表
  • font-src: 控制可加载的字体
  • img-src: 控制可加载的图片、图标和徽标
  • connect-src: 控制可用于 API 调用和 WebSocket 连接的 URL
  • frame-src: 控制可嵌入到 frame 或 iframe 的 URL
  • default-src: 在未显式设置其他指令时作为回退

域名白名单

域名用途CSP 指令是否必需
d4tuoctqmanu0.cloudfront.netKaTeX 样式、字体style-srcfont-src必需
*.mintlify.dev文档内容connect-src必需
d3gk2c5xim1je2.cloudfront.net图标、图片、标志img-src必需
www.googletagmanager.comGoogle Analytics/GTMscript-srcconnect-src可选
cdn.segment.comSegment 分析script-srcconnect-src可选
plausible.ioPlausible 分析script-srcconnect-src可选
tag.clearbitscripts.comClearbit 追踪script-src可选
cdn.heapanalytics.comHeap 分析script-src可选
chat.cdn-plain.comPlain 聊天挂件script-src可选
chat-assets.frontapp.comFront 聊天挂件script-src可选

示例 CSP 配置

仅包含你实际使用的服务域名。删除任何尚未在你的文档中配置的分析类域名。
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;

按代理类型的常见配置

大多数反向代理都支持添加自定义头部。

Cloudflare 配置

创建一个 Response Header Transform 规则:
  1. 在 Cloudflare 控制台,进入 Rules > Overview
  2. 选择 Create rule > Response Header Transform Rule
  3. 配置该规则:
  • Modify response header:设置为 static
    • Header nameContent-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. 部署该规则。

AWS CloudFront 配置

在 CloudFront 中添加一个响应头策略(Response Headers Policy):
{
"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
        }
      }
    }
  }
}

Vercel 配置

将以下内容添加到你的 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;"
        }
      ]
    }
  ]
}

疑难解答

在浏览器控制台中定位 CSP 违规:
  1. 打开浏览器的开发者工具。
  2. 切换到 Console(控制台) 选项卡。
  3. 查找以下前缀的错误信息:
    • 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