Google字体违反了内容安全政策

时间:2015-11-29 16:13:11

标签: html css http google-font-api content-security-policy

我尝试使用Google字体并且我从来没有遇到任何问题,但现在当我尝试在我的标题上添加CSS文件时,我在控制台上收到此错误:

拒绝加载样式表'http://fonts.googleapis.com/css?family=Whatever',因为它违反了以下内容安全策略指令:"style-src 'self' 'unsafe-inline'"

4 个答案:

答案 0 :(得分:55)

这里有两件事需要解决:

  • 将https用于Google字体链接(https://fonts.googleapis.com/css?family=Whatever
  • 授权https://fonts.googleapis.com指令中的style-srchttps://fonts.gstatic.com指令中的font-src"style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com"

答案 1 :(得分:21)

如果您喜欢我并且有点困惑,因为每个答案只是说您需要在style-src指令中授权网址而不显示如何操作,这里是完整的标记:

<meta http-equiv="Content-Security-Policy" content="style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com;">

答案 2 :(得分:1)

使用Helmet时,以下内容可以完美工作(用TypeScript编写):

import * as express from 'express';
import { Express } from 'express';
const helmet = require('helmet');
const expressApp: Express = express(); // Create Express instance.

expressApp.use(
  helmet.contentSecurityPolicy({
    directives: {
      fontSrc: [
        "'self'", // Default policy for specifiying valid sources for fonts loaded using "@font-face": allow all content coming from origin (without subdomains).
        'https://fonts.gstatic.com' // Google Fonts.
      ],
      styleSrc: [
        "'self'", // Default policy for valid sources for stylesheets: allow all content coming from origin (without subdomains).
        'https://fonts.googleapis.com' // Google Fonts.
      ],
    }
  })
);

答案 3 :(得分:0)

可以为Content-Security-Policy提供多个来源。

下面有清晰的细节,对我有用。

根据您遇到的内容(css,img,字体,媒体)错误,可以在下面更改URL。

<html>

<head>

  <meta http-equiv="Content-Security-Policy"
    content="
      default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; 
      style-src   'self' https://fonts.googleapis.com;
      font-src    'self' data: https://fonts.gstatic.com;
      img-src     'self' data: content:;
      media-src   *;
            "
  />

 <title>My page title</title>

</head>

<body>
  some text
</body>

</html>

希望有帮助。