使用Cloudflare的Express.js头盔CSP设置-要放入什么?

使用Cloudflare的Express.js头盔CSP设置-要放入什么?,express,heroku,cloudflare,helmet.js,Express,Heroku,Cloudflare,Helmet.js,我在Heroku(免费层)上部署了一个简单的公文包站点。该站点使用Express Node.js构建,并针对前端进行响应。为了使用需要SSL的.dev域,我注册了Cloudflare。现在,除了我发送电子邮件表单之外,一切都正常了。我得到以下错误: 拒绝连接到`https://.herokuapp.com/api/v1/email/sendemail'因为它违反了以下Contect安全策略指令:“default src'self'”。请注意,没有显式设置“connect src”,因此使用“de

我在Heroku(免费层)上部署了一个简单的公文包站点。该站点使用Express Node.js构建,并针对前端进行响应。为了使用需要SSL的.dev域,我注册了Cloudflare。现在,除了我发送电子邮件表单之外,一切都正常了。我得到以下错误:

拒绝连接到`https://.herokuapp.com/api/v1/email/sendemail'因为它违反了以下Contect安全策略指令:“default src'self'”。请注意,没有显式设置“connect src”,因此使用“default src”作为回退。

我想这是因为头盔和CSP政策,但我不明白我到底需要在里面放些什么。 作为临时解决方案,我禁用了CSP,如下所示:

app.use(
头盔({
内容安全策略:错误,
})
);
但理想情况下,我想这样做:

app.use(
头盔({
内容安全策略:{
指令:{
…helmet.contentSecurityPolicy.GetDefaultDirections(),
'connectsrc':['self','cdnjs.cloudflare.com'],
},
},
})
);

但我不知道该放什么进去。cdnjs.cloudflare.com和ajax.cloudflare.com都不起作用。

以下是Express中CSP最常见的用法。这是我的应用程序的配置,我想你应该在那里找到你需要的一切:

app.use(
  helmet({
    contentSecurityPolicy: {
      directives: {
        defaultSrc: ["'self'"],
        blockAllMixedContent: [],
        fontSrc: ["'self'", 'https:', 'data:'],
        frameAncestors: ["'self'", 'https://accounts.google.com/'],
        frameSrc: ["'self'", 'https://accounts.google.com/'],
        imgSrc: ["'self'", 'data:'],
        objectSrc: ["'self'", 'blob:'],
        mediaSrc: ["'self'", 'blob:', 'data:'],
        scriptSrc: ["'self'", 'https://apis.google.com'],
        scriptSrcAttr: ["'none'"],
        styleSrc: ["'self'", 'https:', "'unsafe-inline'"],
        upgradeInsecureRequests: [],
        connectSrc: ["'self'", 'https://my-app.herokuapp.com'],
      },
    },
  })
);

您的
connectSrc
应包括
https://my-app.herokuapp.com
,就像你们在最后一行看到的。

我真的很困惑,我认为connectSrc应该是某个Cloudflare地址。原来它必须是我的heroku应用程序…哦,好吧,谢谢你,非常有用的回应!