【问题标题】:Refused to load the font '<URL>' because it violates the following Content Security Policy directive: "font-src 'none'"拒绝加载字体“<URL>”,因为它违反了以下内容安全策略指令:“font-src 'none'”
【发布时间】:2022-01-21 17:00:20
【问题描述】:

我对这个错误有一个很大的问题,我似乎无法阻止它显示。

*免责声明:我还是一名大三学生,我还在详细了解 NextJS,所以如果在问这个问题的过程中犯了一些错误,请原谅我。

我正在使用最新版本的NextJS(在提问时)并将其部署到vercel

我收到这个错误,它被垃圾邮件发送了 50 次左右

我尝试过的东西。

1。我向_app.tsx 中的&lt;Head /&gt; 元素添加了一个元标记,如下所示

<meta
    http-equiv="Content-Security-Policy"
    content="font-src * 'unsafe-inline';"
/>

(我多次拼错 content 属性,它给了我一个错误,所以我知道它正在工作,我正在使用 `font-src * 'unsafe-inline',因为据说它允许所有来源) 但错误仍然存​​在

来源:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/font-src

2。我将标题添加到next.config.js

...
const securityHeaders = [
  {
    key: 'Content-Security-Policy',
    value: `font-src * 'unsafe-inline';`,
  },
]
module.exports = withImages({
  async headers() {
    return [
      {
        // Apply these headers to all routes in your application.
        source: '/:path*',
        headers: securityHeaders,
      },
    ]
  },
...

错误一直显示。如果我将此标头设置为font-src 'self'font-src https://js.stripe.com。我在这个错误之上得到了一个不同的错误,它指出 本地字体拒绝加载,因为它违反了 font-src https://js.stripe.com

来源:https://nextjs.org/docs/advanced-features/security-headers

3。我加了vercel.json

我的一个同事建议这可能是一个vercel错误,所以我将它添加到文件中

{
  "routes": [
    {
      "src": "/(.*)",
      "headers": {
        "content-security-policy-report-only": "font-src * 'unsafe-inline';"
      }
    }
  ]
}

来源:https://app.rapidsec.com/docs/deploying-csp

错误仍然存​​在

实际问题。

我应该继续尝试使用这些安全标头,还是死路一条?它是一个vercel错误,还是一个nextjs错误,因为它只发生在服务器上?或者我应该尝试覆盖分配这些字体的类来解决这个错误。 附:当我打开错误中的链接时,它给了我Error 404,这是官方的条带依赖stripe: "^8.195.0

【问题讨论】:

标签: next.js stripe-payments content-security-policy vercel stripes


【解决方案1】:

最可能的解释是您的网站上已经设置了内容安全政策。所有内容都需要通过所有策略,因此添加另一个策略将无济于事。您需要确定现有策略的设置位置并从“font-src 'none';”修改到“font-src js.stripe.com;”。

【讨论】:

  • 我以为是这样的,但我没有找到其他包含 CSP 的地方。我今天将深入研究它,希望我能找到一些东西。但这并不是 NextJS 的第一个这样做的项目。事实上,它是第三个。这让我觉得这是一个默认设置,它位于不被注意的地方
【解决方案2】:

我认为您使用了错误的条带键来访问条带 api。 API 密钥标识调用 API 的应用程序或项目。因此,stripe api 无法识别您的应用程序

有时 chrome 扩展也会导致该错误

【讨论】:

  • 不,条纹工作正常。我认为上面的答案是朝着正确方向迈出的一步,但我不知道目录在哪里,我会调查。
  • 你在不同的浏览器上遇到同样的错误吗?
  • 在我做的事情之后(上面的问题),我只是在 chrome 中得到它。现在我阅读了您的评论,我尝试了隐身模式并且没有错误,所以我一个一个关闭了所有扩展程序,发现一个 youtube ultrawidify 扩展程序导致了这个问题......为什么我不知道,但是..这解决了我的问题。
  • 这样就解决了
【解决方案3】:

一个名为 Ultrawidify 的浏览器扩展程序导致了该问题。当它扫描该站点的视频时(为什么,我不知道。我以为它只在 youtube 上有效)它尝试访问 stripe.com,因为它在“选择要控制的站点”列表中列出。关闭该站点的扩展程序什么也没做,它仍然给出该错误,但禁用它完全解决了问题,

【讨论】:

    猜你喜欢
    • 2022-07-27
    • 2021-04-15
    • 2020-03-22
    • 2018-01-04
    • 2021-05-29
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    相关资源
    最近更新 更多