拒绝加载字体'data:font/woff .....'它违反了以下内容安全策略指令:"default-src'self'".请注意'font-src'

Jav*_*ner 72 javascript reactjs webpack

我的反应webApp在浏览器控制台中提供此错误

Refused to load the font 'data:font/woff;base64,d09........' because it` 
`violates the following Content Security Policy directive: "default-src` `'self'". Note that 'font-src' was not explicitly set, so 'default-src' is used as a fallback.
Run Code Online (Sandbox Code Playgroud)

也:

Refused to connect to 'ws://localhost:3000/sockjs-node/782/oawzy1fx/websocket' because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'connect-src' was not explicitly set, so 'default-src' is used as a fallback.
Run Code Online (Sandbox Code Playgroud)

浏览器控制台截图 在此输入图像描述

index.html有这个元:

<meta http-equiv="Content-Security-Policy" content="img-src 'self' data:; default-src 'self' http://121.0.0:3000/">
Run Code Online (Sandbox Code Playgroud)

WebPack.cofig.js

var debug = process.env.NODE_ENV !== "production";
var webpack = require('webpack');
var path = require('path');

module.exports = {
    context: path.join(__dirname, "./src"),
    devtool: debug ? "inline-sourcemap" : true,
    entry: "../src/index.js",

    module: {
        rules: [
            {
                test: /\.(jpe?g|png|gif|svg|woff|woff2|eot|ttf)$/i,  // a regular expression that catches .js files
                exclude: /node_modules/,
                loader: 'url-loader',
            },
            {
                test: /\.(js|.jsx)$/,
                exclude: /(node_modules|bower_components)/,
                loader: 'babel-loader',
                query: {
                    presets: ['react','es2016', 'stage-0',],
                    plugins: ['react-html-attrs', 'transform-decorators-legacy', 'transform-class-properties'],
                }
            },
            {
                test: /\.css$/,
                use: [
                    "style-loader",
                    {
                        loader: "css-loader",
                    }
                ]
            }
        ]
    },
    resolve: {
        modules: [
            path.join(__dirname, "src"),
            "node_modules",
        ]
    },
    output: {
        path: __dirname + "/public/",
        // publicPath: "/public/",
        filename: "build.js"
    },
    plugins: debug ? [] : [
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.OccurrenceOrderPlugin(),
        new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
    ],
    devServer: {
        port: 3000, // most common port
        contentBase: './public',
        inline: true,
        historyApiFallback: true,
    }
};
Run Code Online (Sandbox Code Playgroud)

Hyd*_*irl 191

对我来说,这是因为Chrome扩展"Grammarly".禁用后,我没有收到错误.

  • 这真是一个愚蠢的黑客.甚至无法想象问题是由于Grammarly chrome应用程序造成的. (8认同)
  • 注意:仅在插件配置下拉列表中"禁用"是不够的,您必须在chrome插件页面上删除或禁用它 (6认同)
  • “保存到 Pocket”扩展程序也可能在 Edge 和 Chrome 中导致此问题。 (5认同)
  • Dangit,Grammarly!我有两个其他开发人员帮我解决这个问题.我们认为我们错误地实施了内容安全策略.从Chrome中移除了我的Grammarly扩展,错误消失了.谢谢或者这个提示! (3认同)
  • 我无法相信我花了几个小时试图意识到发生了什么,这是由Grammarly app引起的.只需删除那个塔什! (2认同)
  • 我的Angular应用存在相同问题。这样就解决了! (2认同)
  • 我必须禁用 Markdown Viewer v3.9 Chrome 扩展 ID ckkdlimhmcjmikdlpkmbgfkaikojcbjk (2认同)

nou*_*ish 33

要修复此特定错误,CSP应包含以下内容:

font-src 'self' data:;
Run Code Online (Sandbox Code Playgroud)

所以,index.html meta应该是:

<meta http-equiv="Content-Security-Policy" content="font-src 'self' data:; img-src 'self' data:; default-src 'self' http://121.0.0:3000/">
Run Code Online (Sandbox Code Playgroud)

  • 我认为这将使您的网站对不良扩展不安全,并且建议您在不进行进一步研究的情况下不要这样做。 (2认同)

Ion*_*ger 16

对于它的价值 - 我有一个类似的问题,假设它与Chrome更新有关.

我不得不添加font-src,然后指定url,因为我使用的是CDN

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; font-src 'self' data: fonts.gstatic.com;">
Run Code Online (Sandbox Code Playgroud)

  • @JavaScriptLearner - 在这种情况下你可以尝试数据: (5认同)
  • 但我使用本地计算机上的字体,所以我会写什么??`数据:fonts.gstatic.com` (2认同)

bri*_*ter 6

从个人经验来看,始终最好的第一步是在隐身(Chrome),私有浏览(Firefox)和InPrivate(IE11 && Edge)中运行您的网站,以消除附加组件/扩展的干扰。如果在其设置中明确启用了它们,它们仍然会干扰此模式下的测试。但是,这是解决问题的第一步。

我之所以在这里,是因为Web of Trust(WoT)向我的页面添加了内容,并且我的页面具有非常严格的内容安全策略:

Header set Content-Security-Policy "default-src 'none'; font-src 'self' data:; style-src 'self' 'unsafe-inline' data:; img-src 'self' data:; script-src 'self' 'unsafe-inline'; connect-src 'self';"
Run Code Online (Sandbox Code Playgroud)

这导致了许多错误。我一直在寻找有关如何告诉扩展程序不要以编程方式尝试在此站点上运行的答案。这样,当人们拥有扩展程序时,它们将不会在我的网站上运行。我想如果可能的话,很久以前就可以在网站上禁止广告拦截器。所以我的研究有点天真。希望这可以帮助其他尝试诊断与其他答案中提到的少数扩展没有特别联系的问题。


小智 6

我面临着类似的问题。

  1. 您需要删除默认选择的所有 CSP 参数,并了解为什么需要每个属性。

font-src - 告诉浏览器从之后指定的 src 加载字体。font-src: 'self' - 这告诉在同一来源或系统中加载字体系列。font-src: 'self' data: - 这告诉在同一源内加载 font-family 以及为获取数据而进行的调用:

您可能还会收到警告“** 无法解码下载的字体,OTS 解析错误:版本标记无效 **” 在 CSP 中添加以下条目。

font-src:'自身'字体

现在加载应该没有错误。


小智 5

您可能需要将此添加到webpack.config.js

devServer: {

        historyApiFallback: true
    }
};
Run Code Online (Sandbox Code Playgroud)