フォント 'data:font / woff…'のロードを拒否しました。これは、コンテンツセキュリティポリシーディレクティブ「default-src 'self'」に違反しています。「font-src」に注意してください


108

私の反応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.

また:

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.

ブラウザコンソールのスクリーンショット ここに画像の説明を入力してください

index.htmlこのメタ:

<meta http-equiv="Content-Security-Policy" content="img-src 'self' data:; default-src 'self' http://121.0.0:3000/">

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,
    }
};

あなたは<META HTTP-当量= "コンテンツセキュリティポリシー"コンテンツ= "IMG SRC- '自己'のデータ:;デフォルト-srcの'自己'しようとすることができXX.XX.XX.XX:8084 / mypp ">
デンマーク

何も変更しない `<meta http-equiv =" Content-Security-Policy "content =" img-src 'self' data :; default-src 'self' 121.0.0:3000 ">; `それでもエラーが発生する
JavaScript学習者2017

回答:


261

私にとっては、Chrome拡張機能「Grammarly」が原因でした。それを無効にした後、エラーは発生しませんでした。


11
これはなんと馬鹿げたハックだ。問題が文法のクロームアプリによるものであるとは想像もできません。
Pardeep Jain

4
何が起こっているのかを理解するために数時間を費やし、それが文法アプリによって引き起こされていたとは信じられません。そのタッシュを取り除いてください!
Andre Evangelista

3
ダンギット、文法!他に2人の開発者にこの問題を解決してもらい、解決できませんでした。コンテンツセキュリティポリシーを誤って実装したと考えました。Chromeから文法の拡張を削除すると、エラーはなくなりました。ありがとうまたはこのヒント!
amlane86 2018

6
注:プラグイン設定ドロップダウンで「無効にする」だけでは不十分です
。Chrome

2
Angularアプリでも同じ問題が発生します。これで直った!
Stack

54

この特定のエラーを修正するには、CSPに以下を含める必要があります。

font-src 'self' data:;

したがって、index.htmlメタは次のようになります。

<meta http-equiv="Content-Security-Policy" content="font-src 'self' data:; img-src 'self' data:; default-src 'self' http://121.0.0:3000/">

1
おかげでこれも問題を解決します。一部のユーザーにとっては拡張機能を無効にすることが現実的ではないことを考慮してください。サイトは、拡張機能をローカルにロードする可能性のある問題を回避します:)
JuanDMeGon

1
私はこれがあなたのサイトを悪い拡張に対して安全でないままにして、さらなる調査なしでそれに対して助言すると思うと思います。
binz

http://121.0.0:3000/既に「自己」を利用中に指定する必要はありますか?
Saurabh Tiwari

20

それは価値がある-Chromeの更新に関連していると仮定して、同様の問題がありました。

CDNを使用していたため、font-srcを追加してから、URLを指定する必要がありました。

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; font-src 'self' data: fonts.gstatic.com;">

1
しかし、私は自分のローカルコンピューターからフォントを使用していたので、うさぎは何を書きますか?data: fonts.gstatic.com
JavaScript学習者2017

5
@JavaScriptLearner-その場合、データを試すことができます:
IonicBurger 2017

12

個人的な経験から、アドオン/拡張機能の干渉を排除するために、シークレットモード(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';"

これにより多くのエラーが発生しました。このサイトでプログラムを使用して実行しないように拡張機能に指示する方法について、もっと答えを探していました。このように、ユーザーが拡張機能を持っている場合、私のサイトでは実行されません。これが可能だったら、広告ブロッカーはずっと前にサイトで禁止されていたと思います。だから私の研究は少し素朴です。これが、他の回答で言及されている少数の拡張機能に明確に関連付けられていない問題を診断しようとしている人を助けることを願っています。



3

今日、ノードアプリケーションでも同じエラーに直面していました。

ここに画像の説明を入力してください

以下は私のノードAPIです。

app.get('azureTable', (req, res) => {
  const tableSvc = azure.createTableService(config.azureTableAccountName, config.azureTableAccountKey);
  const query = new azure.TableQuery().top(1).where('PartitionKey eq ?', config.azureTablePartitionKey);
  tableSvc.queryEntities(config.azureTableName, query, null, (error, result, response) => {
    if (error) { return; }
    res.send(result);
    console.log(result)
  });
});

修正は非常に簡単で、APIの前にスラッシュ「/」がありませんでした。したがって、パスを「azureTable」から「/ azureTable」に変更した後、問題は解決されました。


2

CSPは、信頼できるソースをホワイトリストに登録するのに役立ちます。他のすべてのソースへのアクセスは許可されていません。このQ&Aを注意深く読み信頼できる場合は、フォント、ソケット接続、その他のソースをホワイトリストに登録してください。

何をしているのかわかっている場合は、metaタグをコメント化してテストできます。おそらくすべてが機能します。しかし、あなた/あなたのユーザーはここで保護されているので、metaタグを保持することはおそらく良いことです。


ニースの回答に感謝しますが、それでも私はRefused to load the font 'data:font/woff;base64,d09このエラーを解決でき ます
JavaScript Learner

1
しかし、このメタは最大エラーを解決し<meta http-equiv="Content-Security-Policy" content="default-src *; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'; img-src * data: 'unsafe-inline'; connect-src * 'unsafe-inline'; frame-src *;"
ます

2

同様の問題がありました。angular.jsonで間違った出力フォルダーパスについて言及しました

"outputPath": "dist/",

app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, 'dist/index.html'));
});

2

私は同様の問題に直面していました。

  1. 既定で選択されるすべてのCSPパラメーターを削除し、各属性が必要な理由を理解する必要があります。

font-src-その後に指定されるsrcからフォントをロードするようにブラウザに指示します font-src: 'self'-これは、同じオリジンまたはシステム内のフォントファミリーをロードするように指示します。font-src: 'self' data:-これは、同じ起点内のロードfont-familyと、データを取得するために行われた呼び出しを示します。

また、「**ダウンロードしたフォントのデコードに失敗し、OTS解析エラー:バージョンタグが無効です**」という警告が表示されることもあります。CSPに次のエントリを追加します。

font-src: 'self'フォント

これでエラーなしでロードされるはずです。


1

あなたは多くの場所でインラインスタイルを使用したでしょうが、それは危険である可能性があるため、CSP(コンテンツセキュリティポリシー)は禁止します。

それらのインラインスタイルを削除して、専用のスタイルシートに配置してみてください。


1

私は同じ問題を抱えており、それは./私のnode.jsアプリのディレクトリ名の前に使用することで解決されました、すなわち

app.use(express.static('./public'));



1

ブラウザの拡張機能uBlockの設定「リモートフォントをブロックする」がこのエラーの原因になります。(注:少なくとも私にとっては、文法は問題ではありませんでした。)

通常、これは問題ではありません。リモートフォントがブロックされると、他のフォントにフォールバックし、「ERR_BLOCKED_BY_CLIENT」というコンソール警告が表示されます。ただし、アイコンがボックスとして表示されるため、サイトがFont Awesomeを使用している場合、これは深刻な問題になる可能性があります。

これを修正するためにWebサイトができることはあまりありません(ただし、フォントベースのアイコンにラベルを付けるなどして、悪質になるのを防ぐことができます)。CSPを変更(または追加)しても修正されません。(CDNではなく)Webサイトからフォントを提供しても、フォントは修正されません。

一方、uBlockユーザーは、次のいずれかを実行してこれを修正する権限を持っています。

  • 拡張機能のダッシュボードでグローバルにオプションをオフにします
  • ウェブサイトに移動し、拡張アイコンをクリックしてから、取り消し線の付いた「A」アイコンクリックして、そのサイトのみのフォントをブロックしないようにします
  • 拡張機能のダッシュボードのホワイトリストに追加して、サイトのuBlockを無効にします

0

プロジェクトがvue-cliで実行しているnpm run build場合は、変更する必要があります

assetsPublicPath: '/'assetsPublicPath'./'


0

私は同じ問題を抱えていましたが、代わりに提供しようとしていたファイルのディレクトリにエラーがあったことがわかりました:

app.use(express.static(__dirname + '/../dist'));

私が持っていた:

app.use(express.static('./dist'));


0

実行中のコードでも今日同じ問題に直面しました。さて、私はここでたくさんの答えを見つけました。しかし、私が言及したい重要なことは、このエラーメッセージは非常にあいまいであり、正確なエラーを明示的に示していないことです。

ブラウザー拡張機能が原因で直面した人もいれば、URLパターンが正しくなかったために直面​​した人もあり、その画面のポップアップで使用されるformGroupインスタンスのエラーが原因でこれに直面しました。したがって、コードに新しい変更を加える前に、コードをデバッグして、そのようなエラーがないことを確認してください。実際の理由はデバッグで確認できます。

他に何も機能しない場合は、URLを確認してください。これがこの問題の最も一般的な理由です。


0

私のlaravel&VueJSプロジェクトでは、webpack.mix.jsファイルでこのエラーを解決しました。を含む

const mix = require('laravel-mix');

mix.webpackConfig({
   devServer: {
     proxy: {
       '*': 'http://localhost:8000'
     }
   },
   resolve: {
     alias: {
       "@": path.resolve(
         __dirname,
         "resources/assets/js"
       )
     }
   }
 });

mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css');

0

これは、server.jsファイルをnpmビルド後に作成されたangular distフォルダーに送信するために使用するコードの一部です。

// Create link to Angular build directory
var distDir = __dirname + "/dist/";
app.use(express.static(distDir));

に変更"/dist/"して修正しまし た"./dist/"


-1

私の場合、create-react-appで生成されたアプリからsrc / registerServiceWorkerファイルを削除しました。追加しましたが、すべて正常に機能しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.